将文件名和行号添加到Monolog输出

时间:2017-12-27 12:59:28

标签: php monolog

无法找到添加文件名和调用日志函数的行号的方法。 我使用的是简单的StreamHandler:

$this->log = new Logger('APP');
$this->log->pushHandler(new StreamHandler('/logs/app.log', Logger::DEBUG));

我希望输出类似的内容:

[2017-12-27 12:38:58 filename.php:1234] APP.DEBUG: test 

或包含文件名和行号的任何其他格式。

谢谢和最好的问候

1 个答案:

答案 0 :(得分:0)

很晚了,但我想出了怎么做,我要发布给其他人。

首先,您需要使用要解析的新记录键创建自己的 Processor(我将其命名为 printFullName):

  printFullName() {
    console.log(this.degree + this.nam);
  }

我使用 debug_backtrace 来获取第三个元素基本名称文件和行,但我不确定它是否每次都有效。

然后,使用自定义 LineFormatter 创建您的 Logger(我从 here 获得了这部分):

file_info

现在,您可以使用 class MyProcessor { /** * @param array $record * @return array */ public function __invoke(array $record) { $info = $this->findFile(); $record['file_info'] = $info['file'] . ':' . $info['line']; return $record; } public function findFile() { $debug = debug_backtrace(); return [ 'file' => $debug[3] ? basename($debug[3]['file']) : '', 'line' => $debug[3] ? $debug[3]['line'] : '' ]; } } ,结果将是:

use Monolog\Logger;
use Monolog\Formatter\LineFormatter;
use Monolog\Handler\StreamHandler;

// the default date format is "Y-m-d\TH:i:sP"
$dateFormat = "Y n j, g:i a";
// the default output format is "[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n"
$output = "[%datetime% %file_info%] %channel%.%level_name%: %message% %context% %extra%\n";
// finally, create a formatter
$formatter = new LineFormatter($output, $dateFormat);
// Create a handler
$stream = new StreamHandler(__DIR__.'/my_app.log', Logger::DEBUG);
$stream->setFormatter($formatter);
// bind it to a logger object
$myLogger = new Logger('mylogger');
$myLogger->pushHandler($stream);