Use the log processing class developed by PHP. This class can customize a variety of log configurations and configure them according to the tags. It is convenient to call this class in the code for logging operations. Complete code and demonstration examples are provided for everyone to learn and use.
1. Customize the log root directory and log file name.
2. Customize the log directory using date and time format.
3. Automatically create non-existing log directories.
4. Record logs of different categories, such as information logs, warning logs, and error logs.
5. The log configuration can be customized, and the log calls different log configurations according to the label.
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
<?phprequire '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');?>
View the log file content:
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
This article explains the relevant content of the php log class. For more related knowledge, please pay attention to the php Chinese website.
Related recommendations:
How to combine multiple one-dimensional numbers into a two-dimensional array through PHP
About PHP based on Detailed explanation of the redis counter class
Explain the related methods of returning multiple columns specified in the array in PHP
The above is the detailed content of An explanation of the php log class. For more information, please follow other related articles on the PHP Chinese website!