将文件名和行号添加到 Monolog 输出
Posted
技术标签:
【中文标题】将文件名和行号添加到 Monolog 输出【英文标题】:Adding filename and line number to Monolog output 【发布时间】:2018-06-08 03:01:27 【问题描述】:找不到添加文件名和调用日志函数的行号的方法。 我正在使用一个简单的 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
或任何其他包含文件名和行号的格式。
感谢和问候
【问题讨论】:
Monolog/Processor/IntrospectionProcessor
可以将文件/行/类/函数字段添加到您的日志数据中,但您需要编写一个自定义格式化程序才能获得您所追求的特定输出。
谢谢!这就是我要找的。span>
【参考方案1】:
已经很晚了,但我想出了怎么做,我要发给其他人了。
首先,您需要创建自己的Processor,并使用新的记录键进行解析(我将其命名为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'] : ''
];
我使用debug_backtrace 来获取第三个元素基本名称文件和行,但我不确定它是否每次都能正常工作。
然后,使用自定义 LineFormatter 创建您的 Logger(我从 here 获得这部分):
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);
现在,您可以使用$myLogger->error('Foo');
,结果将是:
[2021 2 24, 6:19 pm ProductController.php:50] mylogger.ERROR: Foo [] []
【讨论】:
以上是关于将文件名和行号添加到 Monolog 输出的主要内容,如果未能解决你的问题,请参考以下文章
使用java的输入,输出流将一个文本文件的内容按行读出,每读一行就顺序添加行号,并写入到另一个文件
Monolog:将不同通道和多个处理程序记录到分组日志文件 + 专用日志文件
使用java的输入输出流将一个文本文件的内容按行读取,每读一行就顺序添加行号,并写入到另一个文件中