Rumah  >  Artikel  >  pembangunan bahagian belakang  >  关于php 日志类的讲解

关于php 日志类的讲解

jacklove
jackloveasal
2018-06-08 16:27:542595semak imbas

使用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 = &#39;.&#39;;    // 日志文件
    private $_log_file = &#39;default.log&#39;;    // 日志自定义目录
    private $_format = &#39;Y/m/d&#39;;    // 日志标签
    private $_tag = &#39;default&#39;;    // 总配置设定
    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=&#39;default&#39;){        // 根据tag从总配置中获取对应设定,如不存在使用default设定
        $config = isset(self::$_CONFIG[$tag])? self::$_CONFIG[$tag] : (isset(self::$_CONFIG[&#39;default&#39;])? self::$_CONFIG[&#39;default&#39;] : array());        // 设置标签
        $config[&#39;tag&#39;] = $tag!=&#39;&#39; && $tag!=&#39;default&#39;? $tag : &#39;-&#39;;        // 返回日志类对象
        return new LOG($config);

    }    /**
     * 初始化
     * @param Array $config 配置设定
     */
    public function __construct($config=array()){        // 日志根目录
        if(isset($config[&#39;log_path&#39;])){
            $this->_log_path = $config[&#39;log_path&#39;];
        }        // 日志文件
        if(isset($config[&#39;log_file&#39;])){
            $this->_log_file = $config[&#39;log_file&#39;];
        }        // 日志自定义目录
        if(isset($config[&#39;format&#39;])){
            $this->_format = $config[&#39;format&#39;];
        }        // 日志标签
        if(isset($config[&#39;tag&#39;])){
            $this->_tag = $config[&#39;tag&#39;];
        }
    }    /**
     * 写入信息日志
     * @param  String $data 信息数据
     * @return Boolean
     */
    public function info($data){        return $this->add(&#39;INFO&#39;, $data);
    }    /**
     * 写入警告日志
     * @param  String  $data 警告数据
     * @return Boolean
     */
    public function warn($data){        return $this->add(&#39;WARN&#39;, $data);
    }    /**
     * 写入错误日志
     * @param  String  $data 错误数据
     * @return Boolean
     */
    public function error($data){        return $this->add(&#39;ERROR&#39;, $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(&#39;[%s] %-5s %s %s&#39;.PHP_EOL, $dt->format(&#39;Y-m-d H:i:s&#39;), $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

<?phprequire &#39;LOG.class.php&#39;;define(&#39;LOG_PATH&#39;, dirname(__FILE__).&#39;/logs&#39;);// 总配置设定$config = array(    &#39;default&#39; => array(        &#39;log_path&#39; => LOG_PATH,       // 日志根目录 
        &#39;log_file&#39; => &#39;default.log&#39;,  // 日志文件
        &#39;format&#39; => &#39;Y/m/d&#39;,          // 日志自定义目录,使用日期时间定义
    ),    &#39;user&#39; => array(        &#39;log_path&#39; => LOG_PATH,        &#39;log_file&#39; => &#39;user.log&#39;,        &#39;format&#39; => &#39;Y/m/d&#39;,
    ),    &#39;order&#39; => array(        &#39;log_path&#39; => LOG_PATH,        &#39;log_file&#39; => &#39;order.log&#39;,        &#39;format&#39; => &#39;Y/m/d&#39;,
    ),
);// 设置总配置LOG::set_config($config);// 调用日志类,使用默认设定$logger = LOG::get_logger();$logger->info(&#39;Test Add Info Log&#39;);$logger->warn(&#39;Test Add Warn Log&#39;);$logger->error(&#39;Test Add Error Log&#39;);// 调用日志类,使用user设定$logger1 = LOG::get_logger(&#39;user&#39;);$logger1->info(&#39;Test Add User Info Log&#39;);$logger1->warn(&#39;Test Add User Warn Log&#39;);$logger1->error(&#39;Test Add User Error Log&#39;);// 调用日志类,使用order设定$logger2 = LOG::get_logger(&#39;order&#39;);$logger2->info(&#39;Test Add Order Info Log&#39;);$logger2->warn(&#39;Test Add Order Warn Log&#39;);$logger2->error(&#39;Test Add Order Error Log&#39;);// 调用日志类,设定类型不存在,使用默认设定$logger3 = LOG::get_logger(&#39;notexists&#39;);$logger3->info(&#39;Test Add Not Exists Info Log&#39;);$logger3->warn(&#39;Test Add Not Exists Warn Log&#39;);$logger3->error(&#39;Test Add Not Exists Error Log&#39;);?>

查看日志文件内容:

ls -lt ./logs/2017/08/27/*.log./logs/2017/08/27/default.log./logs/2017/08/27/order.log./logs/2017/08/27/user.logcat ./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 Logcat ./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 Logcat ./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

本篇文章讲解了php 日志类的相关内容,更多相关知识请关注php中文网。

相关推荐:

如何通过php 实现多个一维数组合拼成二维数组的方法

关于php 基于redis计数器类的详解

讲解php 返回数组中指定多列的相关方法

Atas ialah kandungan terperinci 关于php 日志类的讲解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn