自己写的PHP的Logger

工作中需要用到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较为妥当。

你可能感兴趣的:(PHP,exception,log4j,function,File,include)