Laravel 中自定义日志目录
新人报单!!!
这是我工作用遇到的一个问题,如何把日志写入到指定目录文件。
希望对各位小伙伴有帮助哈!
那么问题来了,比如我在写job的时候,使用 Log::info() 会让日志全部记录在 storage/logs/laravel.log 文件里,查找起来比较麻烦。那么我可不可以单独记录在一个日志文件里呢?
laravel文档里没有写,于是我去翻Laravel的源码,结果还真给我找到了。只需在你的代码中加入
Log::useDailyFiles(storage_path('logs/job/error.log'));
这样日志就会单独记录在 logs/job/error.log 中,如:
这是按每日记录的,想要单文件记录日志可以使用
Log::useFiles(storage_path('logs/job/error.log')); 。
到这里,日志会记录两份,
1.是自带的日志文件内容,
2.是自己指定的日志文件内容。
那么,只想在指定的文件里记录要肿么办呢?
只需在 Log::useDailyFiles(storage_path('logs/job/error.log')) 之前加上,
$monolog = Log::getMonolog();
$monolog->popHandler();
例如:
这样,该类中的日志就是只记录在你指定的文件中。
如果有大神理解更透彻的,希望能把更详细的发布上出来。嘿嘿。。。
本作品采用《CC 协议》,转载必须注明作者和本文链接
高认可度评论:
只用在配置文件里加一个配置就可以了
config\logging.php
'aaa' => [
'driver' => 'daily',
'path' => storage_path('logs/aaa/aaa.log'),
'level' => 'debug',
'days' => 14,
],
调用的时候切一下
Log::channel('aaa')->info('aaaaaa');
这个能不能配置一下,,每次都写Log::useDailyFiles(storage_path('logs/job/error.log')) 这句呀?
@Complicated 自己在封装个方法
Laravel 开箱支持以下几种日志记录设定:
single
、daily
、syslog
和errorlog
, 在config.app
配置文件中的log
选项即可使用你想要的日志存储模式。'log' => 'daily'
即可为每天的文件存放。@sane 是的,不过这是默认带的
@A小丑守护 楼主,你这个
加上之后,就连框架报错的错误都记录到这个目录文件下。
如果想在记录完 自定义日志之后,把日志目录恢复过来,怎么弄啊?
日志记录两次是因为
useDailyFiles ()
方法会注册一个handler
,加上 laravel 默认的日志处理,那就有两个handler。@王成涛 useDailyFiles () laravel 5.6移除了writer.php 该怎么用了?
@dmodmeo 移除了,应该有其他更好的方法替代吧,我还没有试过。。。
只用在配置文件里加一个配置就可以了
config\logging.php
'aaa' => [
'driver' => 'daily',
'path' => storage_path('logs/aaa/aaa.log'),
'level' => 'debug',
'days' => 14,
],
调用的时候切一下
Log::channel('aaa')->info('aaaaaa');
@delpan7 这个现在的版本可以
工作的原因只能使用laravel5.0,使用config\logging.php配置,实现起来好像很难,博主的这个方式挺好。 就是使用了 $monolog = Log::getMonolog(); $monolog->popHandler(); 还是会出现记录两次日子,问题在于异常处理类Handler.php 下的 report方法会再次调用log::error();
希望对比较懒的同学有帮助
laravel 7 。
$monolog = Log::getMonolog(); $monolog->popHandler();
Log::useFiles(storage_path('logs/job/error.log')); 会提示Log 的那些方法不存在。有遇到的吗? 系统自带的日志好不方便 :sob: