我的Laravel 5.3应用程序中有两个嘈杂的控制台命令,我想保留日志,但是希望让它们从系统的其余部分写入不同的日志文件 .
目前我的应用程序使用 $app->configureMonologUsing(function($monolog) { ...
将日志写入 bootstrap/app.php
中配置的文件
二等奖是将所有控制台命令写入另一个日志文件,但理想情况下只是这两个 .
我尝试按照这些说明(https://blog.muya.co.ke/configure-custom-logging-in-laravel-5/和https://laracasts.com/discuss/channels/general-discussion/advance-logging-with-laravel-and-monolog)将所有控制台日志重新路由到另一个文件,但它不起作用,只是在其余代码中引起了奇怪的问题 .
如果这仍然是5.3中的首选方法,那么我将继续尝试,但想知道是否有更新的方法或方法只更改这两个控制台命令的文件 .
2 回答
他们是你可以采取的两种方法
首先,您可以使用
Log::useFiles
或Log::useDailyFiles
,如建议here .这种方法的缺点是所有内容仍然会记录在您的默认日志文件中,因为默认的Monolog是在您的代码之前执行的 .
其次,为了避免在默认日志中包含所有内容,您可以覆盖默认日志记录类 . 一个例子是here . 您可以拥有一个特定的日志文件,例如
Log::info()
,所有其他日志都可以写入您的默认文件中 . 这种方法的明显缺点是它需要更多的工作和代码维护 .这是可能的,但首先您需要删除现有的处理程序 .
Monolog已经设置了一些日志处理程序,所以你需要摆脱那些
$monolog->popHandler();
. 然后使用Wistar's建议添加新日志的简单方法是使用$log->useFiles('/var/log/nginx/ds.console.log', $level='info');
.适用于多个处理程序
如果您设置了多个日志处理程序(例如,如果您使用的是Sentry),则可能需要在清除处理程序之前弹出多个日志处理程序 . 如果你想保留一个处理程序,你需要遍历所有这些,然后读取你想要保留的处理程序 .
如果你试图弹出一个不存在的处理程序,那么
$monolog->popHandler()
将抛出异常,因此你必须jump through hoops才能使它运行 .要更好地控制日志文件,而不是
$log->useFiles()
,您可以使用以下内容: