这是可能的,但首先你需要删除现有的处理程序。
Monolog已经设置了一些日志处理程序,所以你需要摆脱那些与$monolog->popHandler();
。然后使用Wistar's建议添加新日志的简单方法是$log->useFiles('/var/log/nginx/ds.console.log', $level='info');
。
public function fire (Writer $log)
{
$monolog = $log->getMonolog();
$monolog->popHandler();
$log->useFiles('/var/log/nginx/ds.console.log', $level='info');
$log->useFiles('/var/log/nginx/ds.console.log', $level='error');
...
对于多处理器
如果你有一个以上的日志处理程序集(例如,如果你正在使用Sentry),你可能需要弹出一个以上的前处理程序是明确的。如果你想保留一个处理程序,你需要遍历所有这些处理程序,然后读取你想保留的处理程序。
$monolog->popHandler()
会抛出一个异常,如果你试图弹出一个不存在的处理程序,所以你必须jump through hoops才能正常工作。
public function fire (Writer $log)
{
$monolog = $log->getMonolog();
$handlers = $monolog->getHandlers();
$numberOfHandlers = count($handlers);
$saveHandlers = [];
for ($idx=0; $idx<$numberOfHandlers; $idx++)
{
$handler = $monolog->popHandler();
if (get_class($handler) !== 'Monolog\Handler\StreamHandler')
{
$saveHandlers[] = $handler;
}
}
foreach ($saveHandlers as $handler)
{
$monolog->pushHandler($handler);
}
$log->useFiles('/var/log/nginx/ds.console.log', $level='info');
$log->useFiles('/var/log/nginx/ds.console.log', $level='error');
...
在过去的日志文件的更多的控制,而不是$log->useFiles()
你可以使用这样的事情:
$logStreamHandler = new \Monolog\Handler\StreamHandler('/var/log/nginx/ds.console.log');
$pid = getmypid();
$logFormat = "%datetime% $pid [%level_name%]: %message%\n";
$formatter = new \Monolog\Formatter\LineFormatter($logFormat, null, true);
$logStreamHandler->setFormatter($formatter);
$monolog->pushHandler($logStreamHandler);
我从来没有尝试过,但你觉得这个'登录:: useFiles($路径, $级别)'可以帮助吗?请参阅:https://laravel.com/api/5.3/Illuminate/Log/Writer.html#method_useFiles – Wistar
@Wistar感谢您的建议,但这似乎没有什么区别。 –
其他(请参阅:http://stackoverflow.com/questions/32552450/laravel-how-to-log-info-to-separate-file)有报告使用此方法。你有没有尝试第二个答案中的建议? 'Log :: useDailyFiles(storage_path()。'/ logs/name-of-log.log');' 'Log :: info([info to log]);' – Wistar