ThinkPHP6.0日志变化

发布时间:2024-9-21 21:56:30 来源: ThinkPHP

6.0的日志类比之前版本完善了很多,主要新特性包括:

  • 日志信息格式化

  • 多通道写入支持

  • 延时/实时写入

  • 日志信息处理事件

  • 日志级别指定通道写入

  • 支持关闭日志/通道

新【xīn】版的日志类最大的变化就是【shì】支持多通道写入,也【yě】就是说【shuō】你可【kě】以同【tóng】时或者【zhě】给部分日志类【lèi】型增加另外的日志【zhì】通【tōng】道写入,例如对于一些【xiē】异常日志可以选【xuǎn】择【zé】发送【sòng】错误到邮件通知。

其它的变化主要包括:

  • WEB日志和CLI日志合并并统一格式;

  • 默认不再记录访问信息,需要可以自己记录;

  • 独立日志也支持JSON格式记录;

日【rì】志的相关配置【zhì】可以在config/log.php文件中设【shè】置,本篇主要【yào】描述下新版日志的变【biàn】化【huà】。

日志通道

日志【zhì】通道的【de】概【gài】念相当于给日志【zhì】信息【xī】做了【le】一个日志【zhì】空间,每个【gè】日志通道的日志信【xìn】息采用独立的写【xiě】入【rù】机制或者配置参数,你可以给日志信息指定默认的日志【zhì】通道,也可【kě】以动态切换通道【dào】写入,并且支持同【tóng】一个【gè】日志信【xìn】息同时【shí】写入多个日【rì】志通道。

你可以【yǐ】在日志配置【zhì】文件的channels配置中定义通【tōng】道,默认仅定【dìng】义了一个file通【tōng】道【dào】

// 日志【zhì】通道列表
'channels'     => [
    'file' => [
        // 日志记【jì】录方式
        'type'           => 'File',
        // 日志保存目录【lù】
        'path'           => '',
        // 单文件【jiàn】日志写【xiě】入
        'single'         => false,
        // 独【dú】立日志级别【bié】
        'apart_level'    => [],
        // 最大日志文件数【shù】量
        'max_files'      => 0,
        // 使用JSON格式记【jì】录
        'json'           => false,
        // 日志输【shū】出格式化
        'format'         => '[%s][%s] %s',
        // 是否实【shí】时写入
        'realtime_write' => false,
    ],
    // 其它日志通道配置
],

每个日志【zhì】通道必须指定type参【cān】数,该参【cān】数决定了日志【zhì】的写入方式是什么,file就表示文【wén】件日志【zhì】方式写入【rù】,如果需【xū】要指定其它的写入方式【shì】需要安装额【é】外的【de】扩展。但你也可以给不同的【de】日志通道指【zhǐ】定相【xiàng】同【tóng】的type,只是【shì】其【qí】它的配置【zhì】参数【shù】不同【tóng】,例如写入的路径不同之类。

无论使用什么日志写入类型,每个日志【zhì】通【tōng】道可以【yǐ】支持的通用配【pèi】置如下【xià】:

参数说明
level日志通道记录的日志级别
realtime_write日志是否实时写入

level参数的用法和全局日志配置【zhì】一致,除【chú】了在命令行模【mó】式下,默认的日志都是在请求结束【shù】后统一一次性写入,如【rú】果需要实【shí】时【shí】写【xiě】入日志【zhì】信息【xī】需要设置。

'realtime_write'    =>    true,

如果在命令行下,无论是否设置都会自动实时写入日志。

默认通道

通过设置default参数定义日志的默认通道,例如:

'default'    =>    'file',

级别通道

可以设置不同的日志级别使用不同的日志通道

'type_channel'	=>	[
	// 对于error日志级【jí】别 同【tóng】时写入【rù】file和【hé】email两个日志通【tōng】道
	'error'	=>	['file','email'],
]

设置了级别通道后,该级别的日志不会记录到默认通道,请注意。

日志通道需要日志驱动的配合,你也可以自定义日志驱动。

切换通道

你也可以手动切换当前的日志的默认写入通道,例如:

Log::channel('email')->info('这【zhè】是日志信息');

支持切换使用多个通道记录,例如:

Log::channel(['email', 'file'])->info('这是日志信息【xī】');

日志处理

日志写入支持事件监听,例如。

Event::listen('think\event\LogWrite', function($event) {
    if('file' == $event->channel) {
        $event->log['info'][] = 'test info';
    }
});

闭【bì】包的参数是LogWrite事件【jiàn】类对【duì】象实例,你可以获取两个【gè】属【shǔ】性:

属性名描述
channel写入日志的通道名
log写入的日志信息

日志信息是一【yī】个二维【wéi】数组,包含了【le】当前日志通【tōng】道下【xià】(允许记录【lù】的)所有级【jí】别的日志信息。

格式化日志信息

系统【tǒng】提供了两个参数用【yòng】于日【rì】志信【xìn】息【xī】的格式化,第一个是用于自【zì】定义时间显示格式的time_format,第二个是调【diào】整【zhěng】日志输出格式的format参数【shù】。

'channels'    =>    [
    'file'    =>    [
        'type'          => 'file', 
        'json'	        =>	true
        'file_size'   	=> 	1024*1024*10,    
        'time_format'   =>    'Y-m-d H:i:s',
        'format'        =>    '[%s][%s]:%s',
    ],
],

format参【cān】数【shù】的第【dì】一个【gè】%s是【shì】日志记录时间(日【rì】志时间的格式化由time_format参数定义) 第二【èr】个%s是日志级别 第三个%s是日志信息【xī】,顺序不能调整。

JSON格式日志

可【kě】以支持JSON格式记【jì】录文【wén】件日志,更加方便【biàn】一些第三方日【rì】志分析工具进行日志分析【xī】。

在日志配置文件中,添加

return [
    'default'      => 'file',
    'channels'    =>    [
        'file'    =>    [
            'type'          => 'file', 
            'json'	        =>	true
            'file_size'   	=> 	1024*1024*10,    
        ],
    ],
];

即可开启JSON格式记录,CLI命令行的日志记录同样有效。

和【hé】之前版本的区别【bié】在于【yú】,新版的每个日志【zhì】信息都是【shì】一【yī】条JSON数据(旧版本是每【měi】个请求一条【tiáo】JSON数据)。

关闭日志

你可以通过调用close方法动态关闭日志写入。

// 关闭全局日志写【xiě】入
Log::close();
// 关闭某个通道【dào】日志写入
Log::close('file');

如果调用close方法【fǎ】动态关闭【bì】日志【zhì】,会【huì】自动调用clear方法清空日志【zhì】。

清空日志

一旦执行save方【fāng】法后,内存中的日【rì】志【zhì】信息【xī】就会被自动清空,如果需要【yào】提前清空日志【zhì】可以使【shǐ】用:

// 清空所有【yǒu】日志
Log::clear();
//清空通道日志【zhì】可【kě】以【yǐ】使用
Log::clear('file');

在【zài】清空日志方法之前,你可以使【shǐ】用getLog方法获【huò】取内存中【zhōng】的日志。

// 获取(默认通道【dào】)日志【zhì】
$logs = Log::getLog();
// 获取指定【dìng】通道日志
$logs = Log::getLog('file');

日志清空仅仅是清空内存中的日志。

自定义驱动

日志通道【dào】需要自定【dìng】义日志【zhì】驱动,该【gāi】日志驱动需要实现think\contract\LogHandlerInterface接口。

interface LogHandlerInterface
{
    /**
     * 日志写入【rù】接口
     * @access public
     * @param  array $log 日志信【xìn】息
     * @return bool
     */
    public function save(array $log): bool;

}
下一篇:CMSJIA介绍

最新资讯

  1. 2019年乌镇大会,也说说互联网
  2. 响应式网站建设需要准备多少开发预算
  3. CMSJIA介绍
  4. 遵义信息技术服务、WEB软件开发公司
  5. 建设公司网站的作用体现
  6. 品牌保护中域名、商标同等重要
  7. 网站建设哪家公司好
  8. 建设开发手机网站的优势及作用
  9. 我们研究了100个小程序,得出了这些经验!
  10. 公司定制开发网站建设的优势
  11. 移动互联网建站:遵义做网站建设那家公司好
  12. 贵州腾巢网络成功入驻熊掌号,再现移动互联时代新域名