Laravel 中自定义日志目录

新人报单!!!
这是我工作用遇到的一个问题,如何把日志写入到指定目录文件
希望对各位小伙伴有帮助哈!
那么问题来了,比如我在写job的时候,使用 Log::info() 会让日志全部记录在 storage/logs/laravel.log 文件里,查找起来比较麻烦。那么我可不可以单独记录在一个日志文件里呢?

laravel文档里没有写,于是我去翻Laravel的源码,结果还真给我找到了。只需在你的代码中加入

Log::useDailyFiles(storage_path('logs/job/error.log'));
这样日志就会单独记录在 logs/job/error.log 中,如:

file

这是按每日记录的,想要单文件记录日志可以使用
Log::useFiles(storage_path('logs/job/error.log')); 。

到这里,日志会记录两份,
1.是自带的日志文件内容,
2.是自己指定的日志文件内容。

那么,只想在指定的文件里记录要肿么办呢?
只需在 Log::useDailyFiles(storage_path('logs/job/error.log')) 之前加上,
$monolog = Log::getMonolog();
$monolog->popHandler();

例如:
file
这样,该类中的日志就是只记录在你指定的文件中。

如果有大神理解更透彻的,希望能把更详细的发布上出来。嘿嘿。。。

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 6年前 自动加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 12

只用在配置文件里加一个配置就可以了
config\logging.php
'aaa' => [
'driver' => 'daily',
'path' => storage_path('logs/aaa/aaa.log'),
'level' => 'debug',
'days' => 14,
],
调用的时候切一下
Log::channel('aaa')->info('aaaaaa');

5年前 评论
Complicated

这个能不能配置一下,,每次都写Log::useDailyFiles(storage_path('logs/job/error.log')) 这句呀?

6年前 评论
sane

Laravel 开箱支持以下几种日志记录设定:singledailysyslogerrorlog, 在 config.app 配置文件中的 log 选项即可使用你想要的日志存储模式。
'log' => 'daily'即可为每天的文件存放。

6年前 评论

@sane 是的,不过这是默认带的

6年前 评论

@A小丑守护 楼主,你这个

$monolog = Log::getMonolog();
$monolog->popHandler();

加上之后,就连框架报错的错误都记录到这个目录文件下。

如果想在记录完 自定义日志之后,把日志目录恢复过来,怎么弄啊?

5年前 评论
peter_song 3年前

日志记录两次是因为 useDailyFiles () 方法会注册一个 handler,加上 laravel 默认的日志处理,那就有两个handler。

file
file

5年前 评论

@王成涛 useDailyFiles () laravel 5.6移除了writer.php 该怎么用了?

5年前 评论

@dmodmeo 移除了,应该有其他更好的方法替代吧,我还没有试过。。。

5年前 评论

只用在配置文件里加一个配置就可以了
config\logging.php
'aaa' => [
'driver' => 'daily',
'path' => storage_path('logs/aaa/aaa.log'),
'level' => 'debug',
'days' => 14,
],
调用的时候切一下
Log::channel('aaa')->info('aaaaaa');

5年前 评论

工作的原因只能使用laravel5.0,使用config\logging.php配置,实现起来好像很难,博主的这个方式挺好。 就是使用了 $monolog = Log::getMonolog(); $monolog->popHandler(); 还是会出现记录两次日子,问题在于异常处理类Handler.php 下的 report方法会再次调用log::error();

file

希望对比较懒的同学有帮助

3年前 评论

laravel 7 。
$monolog = Log::getMonolog(); $monolog->popHandler();
Log::useFiles(storage_path('logs/job/error.log')); 会提示Log 的那些方法不存在。有遇到的吗? 系统自带的日志好不方便 :sob:

3年前 评论
我是王老改 (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!