9

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

例子:

[2013-11-12 09:13:16] log.INFO: Hello world [] []

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

谢谢!

4

3 回答 3

8

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

假设您的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))
);
于 2015-01-09T13:09:36.310 回答
5

经过进一步研究,我发现这发生在Monolog\Formatter\LineFormatter. 简而言之,括号是空数组的 JSON 表示。不幸的是,Laravel 似乎没有提供一种简单的方法来解决这个问题,所以我最终继承了 Monolog。我在这个 SO post上发布了详细信息。但由于那篇文章不是 Laravel 特定的,我想我会分享如何LineFormatter在 Laravel 上下文中使用这种自定义。

在您的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);

享受!

于 2013-11-12T18:44:18.860 回答
0

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

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

打印为:

My funky log

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

于 2018-02-12T20:19:24.090 回答