工作中需要用到php写日志,log4php需要复杂的配置文件,不想去弄。虽然跟log4j的配置差不多,但也没必要去维护一个日志配置文件。
就自己写了一个单文件的logger类,只需要include进来使用即可。
不多说,贴代码
<?php /* * PHP Logger Class * Created: 2011-10-26 * Author: xingfei(http://blog.csdn.net/jakieyoung) * Licence: Free of use and redistribution */ if(!defined('_LOGGER_PHP_')) { define('_LOGGER_PHP_', '1'); if(!defined('LOG_ROOT')) { define('LOG_ROOT', '/webroot/logs/'); } define('LEVEL_FATAL', 0); define('LEVEL_ERROR', 1); define('LEVEL_WARN', 2); define('LEVEL_INFO', 3); define('LEVEL_DEBUG', 4); class Logger { static $LOG_LEVEL_NAMES = array( 'FATAL', 'ERROR', 'WARN', 'INFO', 'DEBUG' ); private $level = LEVEL_DEBUG; static function getInstance() { return new Logger; } function setLogLevel($lvl) { if($lvl >= count(Logger::$LOG_LEVEL_NAMES) || $lvl < 0) { throw new Exception('invalid log level:' . $lvl); } $this->level = $lvl; } function _log($level, $message, $name) { if($level > $this->level) { return; } $log_file_path = LOG_ROOT . $name . '.log'; $log_level_name = Logger::$LOG_LEVEL_NAMES[$this->level]; $content = date('Y-m-d H:i:s') . ' [' . $log_level_name . '] ' . $message . "\n"; file_put_contents($log_file_path, $content, FILE_APPEND); } function debug($message, $name = 'root') { $this->_log(LEVEL_DEBUG, $message, $name); } function info($message, $name = 'root') { $this->_log(LEVEL_INFO, $message, $name); } function warn($message, $name = 'root') { $this->_log(LEVEL_WARN, $message, $name); } function error($message, $name = 'root') { $this->_log(LEVEL_ERROR, $message, $name); } function fatal($message, $name = 'root') { $this->_log(LEVEL_FATAL, $message, $name); } } }
使用时,先获取一个logger实例,然后调用logger的debug,info,warn,error,fatal等方法。
第一个参数是需要log的内容,第二个参数表示log的名称,作为log文件的文件名。log目录
使用LOG_ROOT来定义。如果需要不同的log目录,则在include之前,首先define自己的LOG_ROOT。
举例如下
<?php define('LOG_ROOT', '/myweb/logs/'); include('logger.php'); $logger = Logger::getInstance(); $logger->debug('this is my first log', 'test');
注意:LOG_ROOT需要在最后添加反斜线‘/’。
记录日志时,会判断loglevel,如果设置的loglevel比使用的loglevel高,则不会写入任何日志。
在需要禁用日志时,就可以setLogLevel(LEVEL_FATAL)来只记录严重级别的日志。
默认的loglevel是最低级别的debug,即记录所有的日志。
在开发阶段使用默认的即可。在生产环境下,一般使用WARN较为妥当。