整了个 Laravel 的多频道日志 ChannelLog 组件
日常开发经常在许多子模块中需要调试、记录一些具体业务的日志信息,又不想放入整个项目的日志流水中去。总是用Storage的disk方法感觉还是不够优雅,file_put_contents加FILE_APPEND,每次定制格式都巨麻烦。
网上搜索了一下找了一圈有一个还比较凑合的方案,改吧改吧就整了这个组件:
https://github.com/nickfan/ChannelLog
ChannelLog
简介
支持多通道(多实例)配置的Laravel 日志组件(基于Monolog)
此项目基于 StackOverflow上的一条自定义日志的问答
安装
- composer 安装组件
composer require "nickfan/channel-log:dev-master"
-
修改config/app.php配置:
providers 组中增加:
Nickfan\ChannelLog\ChannelLogServiceProvider::class,
aliases 组中增加:
'ChannelLog' => Nickfan\ChannelLog\Facades\ChannelLog::class,
-
配置文件发布
php artisan vendor:publish --provider="Nickfan\ChannelLog\ChannelLogServiceProvider"
配置
return [
'default' => [ // 频道标识key
'path' => 'logs/default.log', // 日志文件路径 相对路径会存储在storage_path中
'level' => \Monolog\Logger::DEBUG // 日志等级
],
// 'event' => [
// 'path' => 'logs/event.log',
// 'level' => \Monolog\Logger::INFO
// ],
];
自定义配置器
单频道配置信息中可以根据configurator设定自定义的Logger配置器,
配置器必须实现 Nickfan\ChannelLog\ChannelLogConfigurator
接口
具体可以参考 Nickfan\ChannelLog\ChannelLogDefaultConfigurator
的默认配置器
例如:
return [
'myconsole' => [ // 频道标识key
'path' => 'logs/default.log', // 日志文件路径 相对路径会存储在storage_path中
'level' => \Monolog\Logger::DEBUG // 日志等级
// 设定配置器使用的类名
'configurator' => \App\Support\ChannelLogMyConsoleConfigurator::class
],
];
用法
// 往 default 频道写入一条info级别的日志
ChannelLog::channel('default')->info('my test message {mykey1}',['mykey1'=>'myval1','aaa'=>'abc']);
// 往 event 频道写入一条error级别的日志
ChannelLog::channel('event')->error('my event message {mykey2}',['mykey2'=>'myval2','qqq'=>'qwe']);
其他可以参考Laravel自带的日志的用法或者MonoLog官方
本作品采用《CC 协议》,转载必须注明作者和本文链接
另外其实也参考过其他的组件
比如官方的 theorchard/monolog-cascade 相较而言,monolog-cascade功能强大但配置对于一般日常的小模块开发而言有点冗余。
所以就写一个比较山寨的配置器的思路,如果需要可以自己在配置器流程和配置文件中自行扩展。