关闭

php 日志类

标签: php日志自定义配置日期时间
49961人阅读 评论(0) 收藏 举报
分类:

使用php开发的日志处理类,本类可自定义多种日志配置,根据标签对应配置。代码中方便调用此类进行日志记录操作。提供完整代码及演示例子,方便大家学习使用。

功能:

1.自定义日志根目录及日志文件名称。
2.使用日期时间格式自定义日志目录。
3.自动创建不存在的日志目录。
4.记录不同分类的日志,例如信息日志,警告日志,错误日志。
5.可自定义日志配置,日志根据标签调用不同的日志配置。

代码如下:

LOG.class.php

<?php
/**
 * php日志类
 * Date:    2017-08-27
 * Author:  fdipzone
 * Version: 1.0
 *
 * Description: 
 * 1.自定义日志根目录及日志文件名称。
 * 2.使用日期时间格式自定义日志目录。
 * 3.自动创建不存在的日志目录。
 * 4.记录不同分类的日志,例如信息日志,警告日志,错误日志。
 * 5.可自定义日志配置,日志根据标签调用不同的日志配置。
 *
 * Func
 * public  static set_config 设置配置
 * public  static get_logger 获取日志类对象
 * public  info              写入信息日志
 * public  warn              写入警告日志
 * public  error             写入错误日志
 * private add               写入日志
 * private create_log_path   创建日志目录
 * private get_log_file      获取日志文件名称
 */
class LOG {

    // 日志根目录
    private $_log_path = '.';

    // 日志文件
    private $_log_file = 'default.log';

    // 日志自定义目录
    private $_format = 'Y/m/d';

    // 日志标签
    private $_tag = 'default';

    // 总配置设定
    private static $_CONFIG;

    /**
     * 设置配置
     * @param  Array $config 总配置设定
     */
    public static function set_config($config=array()){
        self::$_CONFIG = $config; 
    }

    /**
     * 获取日志类对象
     * @param  Array $config 总配置设定
     * @return Obj
     */
    public static function get_logger($tag='default'){

        // 根据tag从总配置中获取对应设定,如不存在使用default设定
        $config = isset(self::$_CONFIG[$tag])? self::$_CONFIG[$tag] : (isset(self::$_CONFIG['default'])? self::$_CONFIG['default'] : array());

        // 设置标签
        $config['tag'] = $tag!='' && $tag!='default'? $tag : '-';

        // 返回日志类对象
        return new LOG($config);

    }

    /**
     * 初始化
     * @param Array $config 配置设定
     */
    public function __construct($config=array()){

        // 日志根目录
        if(isset($config['log_path'])){
            $this->_log_path = $config['log_path'];
        }

        // 日志文件
        if(isset($config['log_file'])){
            $this->_log_file = $config['log_file'];
        }

        // 日志自定义目录
        if(isset($config['format'])){
            $this->_format = $config['format'];
        }

        // 日志标签
        if(isset($config['tag'])){
            $this->_tag = $config['tag'];
        }

    }

    /**
     * 写入信息日志
     * @param  String $data 信息数据
     * @return Boolean
     */
    public function info($data){
        return $this->add('INFO', $data);
    }

    /**
     * 写入警告日志
     * @param  String  $data 警告数据
     * @return Boolean
     */
    public function warn($data){
        return $this->add('WARN', $data);
    }

    /**
     * 写入错误日志
     * @param  String  $data 错误数据
     * @return Boolean
     */
    public function error($data){
        return $this->add('ERROR', $data);
    }

    /**
     * 写入日志
     * @param  String  $type 日志类型
     * @param  String  $data 日志数据
     * @return Boolean
     */
    private function add($type, $data){

        // 获取日志文件
        $log_file = $this->get_log_file();

        // 创建日志目录
        $is_create = $this->create_log_path(dirname($log_file));

        // 创建日期时间对象
        $dt = new DateTime;

        // 日志内容
        $log_data = sprintf('[%s] %-5s %s %s'.PHP_EOL, $dt->format('Y-m-d H:i:s'), $type, $this->_tag, $data);

        // 写入日志文件
        if($is_create){
            return file_put_contents($log_file, $log_data, FILE_APPEND);
        }

        return false;

    }

    /**
     * 创建日志目录
     * @param  String  $log_path 日志目录
     * @return Boolean
     */
    private function create_log_path($log_path){
        if(!is_dir($log_path)){
            return mkdir($log_path, 0777, true);
        }
        return true;
    }

    /**
     * 获取日志文件名称
     * @return String
     */
    private function get_log_file(){

        // 创建日期时间对象
        $dt = new DateTime;

        // 计算日志目录格式
        return sprintf("%s/%s/%s", $this->_log_path, $dt->format($this->_format), $this->_log_file);

    }

}

?>

 
demo.php

<?php
require 'LOG.class.php';

define('LOG_PATH', dirname(__FILE__).'/logs');

// 总配置设定
$config = array(
    'default' => array(
        'log_path' => LOG_PATH,       // 日志根目录 
        'log_file' => 'default.log',  // 日志文件
        'format' => 'Y/m/d',          // 日志自定义目录,使用日期时间定义
    ),
    'user' => array(
        'log_path' => LOG_PATH,
        'log_file' => 'user.log',
        'format' => 'Y/m/d',
    ),
    'order' => array(
        'log_path' => LOG_PATH,
        'log_file' => 'order.log',
        'format' => 'Y/m/d',
    ),
);

// 设置总配置
LOG::set_config($config);

// 调用日志类,使用默认设定
$logger = LOG::get_logger();
$logger->info('Test Add Info Log');
$logger->warn('Test Add Warn Log');
$logger->error('Test Add Error Log');

// 调用日志类,使用user设定
$logger1 = LOG::get_logger('user');
$logger1->info('Test Add User Info Log');
$logger1->warn('Test Add User Warn Log');
$logger1->error('Test Add User Error Log');

// 调用日志类,使用order设定
$logger2 = LOG::get_logger('order');
$logger2->info('Test Add Order Info Log');
$logger2->warn('Test Add Order Warn Log');
$logger2->error('Test Add Order Error Log');

// 调用日志类,设定类型不存在,使用默认设定
$logger3 = LOG::get_logger('notexists');
$logger3->info('Test Add Not Exists Info Log');
$logger3->warn('Test Add Not Exists Warn Log');
$logger3->error('Test Add Not Exists Error Log');
?>

 
查看日志文件内容:

ls -lt ./logs/2017/08/27/*.log
./logs/2017/08/27/default.log
./logs/2017/08/27/order.log
./logs/2017/08/27/user.log

cat ./logs/2017/08/27/default.log
[2017-08-27 13:50:13] INFO  - Test Add Info Log
[2017-08-27 13:50:13] WARN  - Test Add Warn Log
[2017-08-27 13:50:13] ERROR - Test Add Error Log
[2017-08-27 13:50:13] INFO  notexists Test Add Not Exists Info Log
[2017-08-27 13:50:13] WARN  notexists Test Add Not Exists Warn Log
[2017-08-27 13:50:13] ERROR notexists Test Add Not Exists Error Log

cat ./logs/2017/08/27/order.log
[2017-08-27 13:50:13] INFO  order Test Add Order Info Log
[2017-08-27 13:50:13] WARN  order Test Add Order Warn Log
[2017-08-27 13:50:13] ERROR order Test Add Order Error Log

cat ./logs/2017/08/27/user.log
[2017-08-27 13:50:13] INFO  user Test Add User Info Log
[2017-08-27 13:50:13] WARN  user Test Add User Warn Log
[2017-08-27 13:50:13] ERROR user Test Add User Error Log



源码下载地址:点击查看

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    微博
    微信公众号
    微信分享公众平台-破晓领域
    破晓领域
    微信号:fdipzone-idea
    名称:破晓领域

    个人资料
    • 访问:6941789次
    • 积分:44220
    • 等级:
    • 排名:第78名
    • 原创:281篇
    • 转载:24篇
    • 译文:0篇
    • 评论:455条
    博客专栏
    最新评论