Laravel日志记录:日志行末尾的额外方括号


Laravel logging: extra square brackets at end of log lines?

我对 Laravel 很陌生,当我使用它基于 Monolog 的日志记录时,我已经注意到了,例如 Log::info('blah blah'),它写入我的日志文件的行后缀为两组空的方括号。 它们的用途是什么,我怎样才能关闭它们? 它们丝毫没有帮助。 我尝试深入研究源代码并在谷歌上搜索一下,但我没有看到任何解释。

例:

[2013-11-12 09:13:16] log.INFO: 你好世界 [] []

[2013-11-12 09:13:31] log.INFO: 我的愚蠢日志消息 [] []

谢谢!

这是一个解决方案,它将 curtisdf 的答案与 Seldaek 的这个答案相结合,并且不需要子类化 Monolog 的LineFormatter

假设您的app/start/global.php文件包含:

Log::useFiles(storage_path() . '/logs/laravel.log');

将其替换为:

use Monolog'Handler'StreamHandler;
use Monolog'Logger as MonologLogger;
use Monolog'Formatter'LineFormatter;
// Use custom LineFormatter, with ignoreEmptyContextAndExtra enabled
Log::getMonolog()->pushHandler(
    (new StreamHandler(
        storage_path() . '/logs/laravel.log',
        MonologLogger::DEBUG
    ))->setFormatter(new LineFormatter(null, null, true, true))
);

经过进一步研究,我发现这种情况发生在Monolog'Formatter'LineFormatter. 简而言之,括号是空数组的 JSON 表示形式。 不幸的是,Laravel似乎没有提供一个简单的方法,所以我最终对Monolog进行了子类化。 我在这个SO帖子中发布了详细信息。 但是由于这篇文章不是特定于 Laravel 的,我想我会分享如何在 Laravel 上下文中使用这样的自定义LineFormatter

在您的app/start/global.php中,默认情况下有一个定义日志记录的部分。 它看起来像这样:

Log::useDailyFiles(storage_path().'/logs/log-'.php_sapi_name().'.txt');

将其替换为:

$handler = new Monolog'Handler'StreamHandler(
    storage_path().'/logs/log-'.php_sapi_name().'.txt');
$handler->setFormatter(new My'Fancy'Monolog'LineFormatter());
Log::getMonolog()->pushHandler($handler);

享受!

如果您

不介意将 [] 作为第二个参数添加到对 Log:: 的调用中,则不会打印它:

Log::info('My funky log', []) ;

打印为:

My funky log

这种用法还提醒您可以选择在该数组中传递对象,如果需要,它将被转储。