我对Laravel很新,我注意到当我使用基于Monolog的日志记录时,例如Log::info('blah blah')
,它写入我的日志文件的行后缀有两组空方括号。它们是什么,我怎么能把它们关掉?他们丝毫没有帮助。我已经尝试深入挖掘源代码和谷歌搜索,但我没有看到任何解释。
示例:
[2013-11-12 09:13:16] log.INFO:Hello world [] []
[2013-11-12 09:13:31] log.INFO:我的愚蠢日志消息[] []
谢谢!
答案 0 :(得分:8)
这是一个将curtisdf的回答与this answer by 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))
);
答案 1 :(得分:5)
经过进一步研究,我发现这种情况发生在Monolog\Formatter\LineFormatter
。简而言之,括号是空数组的JSON表示。不幸的是,Laravel似乎没有提供一个简单的方法,所以我最终继承了Monolog。我在this SO post发布了详细信息。但由于该帖子不是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);
享受!
答案 2 :(得分:0)
如果您不介意将 [] 作为第二参数添加到Log::
的来电中,那么它就不会被打印出来:
Log::info('My funky log', [])
;
打印为:
My funky log
此用法还提醒您可以选择传递该数组中的对象,如果需要,它将被转储。