Laravel5.5-自定义输出单一类别的日志

背景

在使用一段时间的sealog之后,很喜欢可以在任何位置输出任意名称的log日志文件出来,又着手于一个laravel项目之后就很想念那种sealog那种自由打印log的感觉,在不想更改底层代码的情况下,找到了一种有点傻吊的方式可以在特定的文件内打印出特定的日志

改造(其实这个方法很呆)

在查看了vendor/laravel/framework/src/Illuminate/log/Write.php代码后,我们发现使用
Log::useDailyFiles(storage_path('logs/request/log.log'),14,'note')可以配置一个新的位置并创建自定义的文件来打印log,
此函数有三个参数,分别是日志位置,保存的天数,以及日志级别,这个日志级别很重要,为后面在指定位置只打印一种日志提供重要标识
注意我这里在第三个参数,日志级别上写了'note', 但是laravel本身是没有'note'这个级别的日志的
默认的日志级别只有

'debug' => MonologLogger::DEBUG,
'info' => MonologLogger::INFO,
'notice' => MonologLogger::NOTICE,
'warning' => MonologLogger::WARNING,
'error' => MonologLogger::ERROR,
'critical' => MonologLogger::CRITICAL,
'alert' => MonologLogger::ALERT,
'emergency' => MonologLogger::EMERGENCY,

可以在write.php中查看到相关代码
进一步我们在Logger.php中可以看到每个级别都有一个分数

const DEBUG = 100;
const INFO = 200;
const WARNING = 300;
const ERROR = 400;
const CRITICAL = 500;
const ALERT = 550;
const EMERGENCY = 600;

日志会输出我们传入的级别分数以上的日志,而在小于此级别的log将不会被打印
如果我们直接使用常用的Log::info()去打印日志,那么可以在指定位置打印一个新的文件,但是那些我们不需要的别的报错也会在此文件中输出,看起来就很混乱,这里就想到了我们可以加一个超高级别的参数
于是在write类中自定义了一个新的级别'note'
'note' => MonologLogger::NOTE
并在logger类中给其分数大于别的级别,
const NOTE = 10001;
这样在使用的时候在指定的位置之会打印note的日志,不会打印其他级别的日志了
Log::note('Client:'.$request->ip().' | request:'.$request->url(),$params);
来打印指定数据
这个方法很呆,但是可以把某个需要的日志都记录在一个文件里,并且不被其他的错误日志干扰,让在在5.7版本,laravel已经给了新的功能来实现更轻松的日志打印,所以这里只是针对还未真正优雅的5.5

你可能感兴趣的:(Laravel5.5-自定义输出单一类别的日志)