php 日志类

2023-05-16

使用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



源码下载地址:点击查看

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php 日志类 的相关文章

  • 带单引号的 XPATH 查询[重复]

    这个问题在这里已经有答案了 有人知道如何解决这个问题吗 单引号让我陷入困境 nodes xml gt xpath item contains catalog Billy s Blogs title 我尝试以各种方式逃避它 但都抛出错误 no
  • Laravel Redis 配置

    我目前正在使用 Laravel 和 Redis 创建一个应用程序 几乎一切都工作正常 我按照文档中的说明扩展了身份验证 用户可以订阅 登录 注销 我可以创建内容 所有内容都存储在 Redis 中 但我有一个问题 我无法运行 php arti
  • 为什么 count 比 $count 差

    我只是在查看不同问题的答案以了解更多信息 我看到一个answer https stackoverflow com a 4891402 429850这表明在 php 中编写这样的做法是不好的做法 for i 0 i
  • 动态重新定义 PHP 类函数?

    我试图弄清楚如何动态导入大量 PHP 类函数 例如 class Entity public function construct type require once type functions php person new Entity
  • 我可以在 php 中的 SESSION 数组上使用 array_push 吗?

    我有一个想要在多个页面上使用的数组 因此我将其设为 SESSION 数组 我想添加一系列名称 然后在另一个页面上 我希望能够使用 foreach 循环来回显该数组中的所有名称 这是会议 SESSION names 我想使用 array pu
  • 在 JAX-WS 中使用安全性的最佳实践是什么

    这是场景 我有一些需要保护的 Web 服务 JAX WS 目前 为了身份验证需求 我提供了额外的 SecurityWService 它为授权用户提供了一些需要在请求其他服务时描述的 userid 和 sessionid 使用一些java安全
  • CodeIgniter加入选择为

    我的数据库中有 2 个表需要加入 一张表是 artikelen 表 另一张表是 Collections 表 我目前有 this gt db gt select this gt db gt from collecties this gt db
  • Apache LOG:子进程 pid xxxx 退出信号分段错误 (11)

    Apache PHP Mysql Linux 注意 子进程 pid 23145 退出信号分段错误 11 tmp 中可能存在 coredump 但 tmp下没有找到任何东西 我怎样才能找到错误 PHP 代码中函数的无限循环导致了此错误
  • 如何处理PDO异常[重复]

    这个问题在这里已经有答案了 我正在尝试与PDOphp 上的类 但我在找到处理错误的正确方法时遇到了一些麻烦 我编写了以下代码
  • PHP:解析器 asp 页面 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 早上好 我可以用 php 解析一个
  • 如何从文件中获取整个函数

    好的 我现在正在逐行阅读一个文件 我知道文件中的每个函数名称 因为它是在 XML 文档中的其他位置定义的 应该是这样的 function function name 其中 function name 是函数的名称 我从 XML 文档中获取所
  • 多维数组中的数组排列保留键 PHP

    这两天我一直在疯狂地尝试完成这个任务 也许你可以启发我 这是针对赛马投注排列的 每次用户玩游戏时 我都会得到一个多维数组 2 个级别 第一级包含比赛 ID 第二级包含用户为该比赛选择的马匹 它看起来像这样 play array 4 gt a
  • Php Curl HTTP POST REQUEST 使用嵌套键值对设置自定义标头

    如何使用 Curl 在 php 中设置此标头 CustomInfo 元素是数组 嵌套键值对 AuthenticationInfo 元素是数组 嵌套键值对
  • POSTed 数组保留其值

    今天 我注意到我的一个 WordPress 安装的行为方式非常奇怪 每当我从仪表板更新帖子时 它的一些额外输入都会保留它们已有的值 所有这些都是多维数组 例如 post php post 123 action 编辑
  • 即使在双引号内或使用 PHP_EOL,PHP echo 也不打印换行符

    这是一张照片剪辑 我认为它很清楚 这真让我抓狂 我似乎无法让 php 在我的本地主机 使用 xampp 或在线 PHP 解释器上打印换行符 如果你想在 php 中使用 HTML 标签 试试这个 echo dkljaks aalksja kl
  • 多维数组 PHP 内爆 [重复]

    这个问题在这里已经有答案了 就我的数据结构而言 我有一个 communications 数组 每个 communications id 本身包含三部分信息 id score 和 content 我想内爆这个数组以获得逗号分隔的 id 列表
  • 从 URL 任何文件类型创建图像

    我知道imagecreatefromgif https www php net manual en function imagecreatefromgif php imagecreatefromjpeg https www php net
  • 从 $i 获取值,顺序被打乱

    for i 0 i lt count name i some output ommited td td
  • 通过 Facebook 图 api 点赞帖子

    你好 我对 facebook PHP SDK 没有什么问题 我想通过 facebook PHP SDK 点赞帖子或其他内容 我正在执行此代码 我认为它应该是正确的 但显然它不起作用 给定的错误代码是的 PHP SDK不知道这种POST请求
  • 无法将句子插入数据库

    我有一些句子 我必须选择由 6 个以上单词组成的句子 然后它们将被插入到数据库中

随机推荐

  • php中常见的header类型

    lt php 使用 mime content type 查看 mimetypes 61 array 39 ez 39 61 gt 39 application andrew inset 39 39 hqx 39 61 gt 39 appli
  • php Captcha 驗證碼類

    lt php Captcha 驗證碼類 Date 2011 02 19 Author fdipzone class Captcha class start private sname 61 39 39 public function con
  • HTML5本地存储不完全指南

    编辑推荐 xff1a 这篇文章来自于黑客志 xff0c 对HTML5的本次存储方式进行了非常全面的介绍和分析 xff0c 对于学习HTML5的开发者来说 xff0c 不容错过哦 历史 在HTML5本地存储之前 xff0c 如果我们想在客户端
  • 线性筛素数

    如题 xff0c 给定一个范围N xff0c 你需要处理M个某数字是否为质数的询问 xff08 每个数字均在范围1 N内 xff09 输入输出格式 输入格式 xff1a 第一行包含两个正整数N M xff0c 分别表示查询的范围和查询的个数
  • 六度分隔理论

    小世界现象 xff08 又称小世界效应 xff09 假设世界上所有互不相识的人只需要很少中间人就能建立起联系 六度分隔理论 xff08 Six Degrees of Separation xff09 后来1967年哈佛大学的心理学教授斯坦利
  • Ubuntu安装MongoDB

    UBuntu上安装MongoDB server 获取最新版本 wget http fastdl mongodb org linux mongodb linux x86 64 2 0 2 tgz 解压缩即可执行 tar zxvf mongod
  • 文件内容去重及排序

    本文将使用 php 和 linux sort 命令两种方法 xff0c 分别实现文件内容去重及排序 xff0c 并提供完成演示代码 1 创建测试文件 写入1000000个数字 xff0c 每行一个数字 span class php span
  • 新浪微博技术架构

    中国首届微博开发者大会在北京举行 xff0c 这是国内微博行业的首场技术盛宴 作为国内微博市场的绝对领军者 xff0c 新浪微博将在此次大会上公布一系列针对开发者的扶持政策 xff0c 以期与第三方开发者联手推动微博行业的整体发展 图为微博
  • Linux 使用pwgen命令创建随机密码

    创建随机密码 xff0c 以前写过一篇 php密码生成类 的文章 PHP密码生成类的功能如下 xff1a 1 可设定密码长度 2 可设定要生成的密码个数 xff0c 批量生成 3 可以指定密码的规则 xff0c 字母 xff0c 数字 xf
  • Mongodb启动命令mongod参数说明

    Mongodb启动命令mongod参数说明 mongod的主要参数有 xff1a 基本配置 quiet 安静输出 port arg 指定服务端口号 xff0c 默认端口27017 bind ip arg 绑定服务IP xff0c 若绑定12
  • PHP接收二进制流并生成文件

    PHP接收二进制流并生成文件 lt php 二进制流生成文件 POST 无法解释二进制流 xff0c 需要用到 GLOBALS 39 HTTP RAW POST DATA 39 或 php input GLOBALS 39 HTTP RAW
  • php利用curl实现多进程下载文件类

    批量下载文件一般使用循环的方式 xff0c 逐一执行下载 但在带宽与服务器性能允许的情况下 xff0c 使用多进程进行下载可以大大提高下载的效率 本文介绍php利用curl的多进程请求方法 xff0c 实现多进程同时下载文件 原理 xff1
  • Linux 使用getopts命令获取命令行参数

    Linux getopts命令用于获取命令行中的参数 调用格式 xff1a span class hljs built in getopts span option string variable 参数说明 xff1a option str
  • mysql表数据行列转换方法

    开发过程中 xff0c 因为历史原因或性能原因 xff0c 需要对表的列数据转为行数据 xff0c 或行数据转换为列数据使用 xff0c 本文将介绍mysql表数据行列转换的方法 xff0c 提供完整演示例子及sql技巧 1 行转列 创建测
  • 关于在vue3中使用setup语法糖后设置name的问题

    当我们不使用setup语法糖时 xff0c 我们可以以上形式设置name span class token operator lt span script lang span class token operator 61 span spa
  • 查看mysql数据库大小、表大小和最后修改时间

    1 查看数据库表基本信息 select from information schema TABLES where information schema TABLES TABLE SCHEMA 61 39 数据库名 39 and inform
  • JS小游戏-象棋暗棋

    游戏图片 xff1a 源文件下載地址 xff1a 点击下载源文件 Javascript 部分 xff1a chinese chess Author fdipzone Date 2012 06 24 Ver 1 0 var gameimg 6
  • nginx快速查看配置文件的方法

    nginx的配置放在nginx conf文件中 xff0c 一般我们可以使用以下命令查看服务器中存在的nginx conf文件 locate nginx conf usr local etc nginx nginx conf usr loc
  • JS小游戏-极速快跑

    游戏图片 xff1a 源文件下载地址 xff1a 点击下载 Javascript部分 xff1a 极速快跑 Author fdipzone Date 2012 07 15 Ver 1 0 var gameimg 61 39 images s
  • php 日志类

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