php tp框架 自定义日志

调用方法

 $file_log = [
     'order_id' => 123,
];
(new Logs('log'))->infos('日志文案', $file_log);

[2023-12-14 15:24:13] [INFO] [log] {"msg":"日志文案","params":{"order_id":123},"file":null,"function":"getFineComment","class":"app\\api\\controller\\v1\\Test","args":[[]]}

 

 

logs.php

<?php

namespace app\common\logging;


/**
 * Notes: 日志写入
 * @package app\common\model
 * @class LogCache
 * @author Hdd 2023-09-13
 *
 *  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      获取日志文件名称
 *  public static logType     自定义日志配置
 */

class LogCache
{
    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 LogCache($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();

        $log_file_arr = explode('/', $log_file);
        $log_name = str_replace(Logs::str_replace, strtolower($type), end($log_file_arr));
        array_pop($log_file_arr);
        $log_file_arr[] = $log_name;
        $log_file = str_replace('//', '/', implode('/', $log_file_arr));

        // 创建日志目录
        $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)
        {
            $res = file_put_contents($log_file, PHP_EOL.$log_data, FILE_APPEND);
            chmod($log_file, 0777);
            return $res;
        }

        return false;
    }

    /**
     * 创建日志目录
     * @param  String  $log_path 日志目录
     * @return Boolean
     */
    private function create_log_path($log_path)
    {

        if(!is_dir($log_path))
        {
            $res =  @mkdir($log_path, 0777, true);
            if ($res)
            {
                //循环给生成的目录权限
                $log_path_array = explode('runtime', $log_path);
                $log_path1 = $log_path_array[0].'runtime';
                $path = end($log_path_array);
                $path = trim($path, '/');
                $path_array = explode('/', $path);

                $url = [];
                foreach ($path_array as $k => $v)
                {
                    $temp_url = '';
                    for ($i=0; $i<$k+1; $i++) {
                        $temp_url .= '/'.$path_array[$i];
                    }
                    $url[] = $log_path1.$temp_url;
                }

                foreach ($url as $v) {
                    chmod($v, 0777);
                }
            }
        }
        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);
    }





}

 

posted @ 2023-12-14 15:27  -韩  阅读(71)  评论(0编辑  收藏  举报