gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 11:21:56 33 4
gpt4 key购买 nike

找不到添加文件名和调用日志函数的行号的方法。
我正在使用一个简单的 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 

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

谢谢和最好的问候

最佳答案

已经晚了,但我想出了怎么做,我要发布给其他人。
首先,您需要创建自己的 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 [] []

关于php - 将文件名和行号添加到 Monolog 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47992643/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com