Chinaunix首页 | 论坛 | 博客
  • 博客访问: 295464
  • 博文数量: 153
  • 博客积分: 3347
  • 博客等级: 中校
  • 技术积分: 1556
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-30 17:50
文章分类

全部博文(153)

文章存档

2013年(7)

2012年(21)

2011年(46)

2010年(16)

2009年(63)

我的朋友

分类:

2009-12-30 18:19:50

简单的说,
开发中的日志可以分为错误日志和一般用户操作日志。除了以前做管理后台的时候会记录一些操作日志以外,之前没怎么重视日志。其实完善的日志机制能够记录恶 意的操作,帮助程序员发现问题,提高安全性。用户操作日志(比如登录日志、删除操作日志)通常需要手动记录,根据情况,决定是记录在数据库还是文件中。
通常错误日志 php 可以自己记录。比如我在 php.ini 文件中设置:
error_reporting  =   E_ALL  
log_errors = On
error_log = "D:\Program\php5\hick.log"
php 就会把除 E_STRICT (Runtime Notice)以外的全部错误(参考 )都记录到上面设置的 .log 文件。如果这时候设置 php.ini 中的 display_errors 为 Off (当然也可以通过 ini_set 设置),PHP 的错误信息就不会被输出到浏览器端。对产品环境来说,错误所暴露的信息可能是很严重的安全隐患,也是很不友好的。
默认情况下, php 的错误通常以类似下面这样的形式输出:
Warning: Cannot modify header information - headers already sent (output started at ./hick.php:41) in  ./hick.php on line 43
你 也可以通过 set_error_handler 来自定义错误处理函数,定制具体输出样式。详细情况可以参考手册。不过需要注意使用 set_error_handler 以后, 即使进行了上面的设置, PHP 也不会记录错误日志,需要手动用 error_log 或者 file_put_contents 函数写入日志文件。另外自定义错误处理函数有一个缺点,就是无法处理这些错误类型:E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING 等。而作为一种特殊的”错误”—异常, set_exception_handler 能够处理所有异常。
以上笔记经过了实践,运行环境为 apache2 + php 5.2 ,更多详细信息可以参考 php 手册。
顺 便提一下, file_put_contents 是 PHP5 才支持的函数,它和依次调用 fopen(),fwrite() 以及 fclose() 功能一样。而 error_log 的写日志文件的用法也跟该函数差不多。实际上我通过循环写入文件的测试,两者性能也差不多,估计写文件的实现方式也差不多。
阅读(807) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~