我正在记录如下:
Log::debug("test");
这是文件中的一行:
[2016-09-09 00:02:03] local.DEBUG: test
如何配置日志以写入行和文件?
由于
答案 0 :(得分:1)
您实际上可以将Laravel记录器配置为执行许多操作。我以前做过,在你的情况下它会是这样的:
app('log')->getMonolog()->pushProcessor(function ($record) {
if (array_get($record, 'level_name') === 'DEBUG') {
// ...
}
return $record;
});
主要的问题是:您正在尝试附加几乎不可能与PHP保持一致的信息,即包含触发日志记录功能的代码的文件和行。在你的情况下,你使用Facade调用方法,它将解析为Laravel的日志编写器,后者又调用Monolog包,然后触发你的处理器(这是一个Closure)。试图追溯你的方式是一个愚蠢的差事。
所以,我认为你有两种方法可以轻松完成这项工作:
1)只需记录日志文件和行,将其作为context
传递给日志编写者:
Log::debug('My debug message', ['file' => __FILE__, 'line' => __LINE__]);
2)您可能知道,Laravel日志中通常包含文件和行信息的原因与记录器本身无关,而是与PHP Exception的内置__toString
方法有关,其输出以及堆栈跟踪。如果我们可以利用它来实现我们想要的东西怎么办?
<?php
class DebugInfo extends \Exception
{
public function __toString()
{
return 'Debug info "'.$this->getMessage().'" on file '.$this->getFile().':'.$this->getLine();
}
}
这样你就可以写:
Log::debug(new DebugInfo('My debug message'));
你的日志看起来像这样:
[2016-09-09 09:21:29] local.DEBUG: Debug info "My debug message" on file .../app/Http/Controllers/PresentationController.php:15
作为旁注,如果您希望向自己发送消息以进行调试,我建议您尝试Laravel DebugBar package。