gpt4 book ai didi

php - 获取 Monolog JSON 堆栈跟踪作为数组

转载 作者:行者123 更新时间:2023-12-04 02:20:25 24 4
gpt4 key购买 nike

我正在使用 Laravel 4.2 并希望以 JSON 格式输出日志。 Laravel 使用 Monolog,所以我像这样配置了 JSON 格式化程序:

$logHandler = new Monolog\Handler\StreamHandler(Config::get('app.logFile'), Monolog\Logger::DEBUG);
$logHandler->setFormatter(new Monolog\Formatter\JsonFormatter);
Log::getMonolog()->pushHandler($logHandler);

问题是堆栈跟踪作为消息字符串的一部分包含在内,如下所示:

{
"message": "exception 'Exception' with message 'Socket operation failed: Host name lookup failure' in /var/www/vendor/clue/socket-raw/Socket/Raw/Socket.php:388\nStack trace:\n#0 /var/www/vendor/clue/socket-raw/So..."
}

有人能给我指出正确的方向,让堆栈在 json 中跟踪它自己的单独数组吗?

最佳答案

迟来的更新:

主要的问题是 Laravel 和许多跟随其示例的代码试图自己记录异常,例如 Log::error($e)这是使用 Monolog 记录异常的错误方法。第一个参数应该是一个简单的消息字符串。在处理它时,Monolog\Logger::addRecord() 显式地将消息转换为字符串:

$record = array(
'message' => (string) $message,
//...
);

如果 $message 实际上是一个异常,您将获得作为字符串的整个堆栈跟踪。不幸的是,这就是 Laravel 的 default exception handler does .

将堆栈跟踪作为数组获取的正确方法是将异常作为上下文传递,以便格式化程序可以使用非字符串化的异常。例如:

Log::error($e->getMessage(), ['exception' => $e]);

你需要在 Laravel 的自定义异常处理程序中放入一些等效的东西,然后你可以使用适当的 JSON 格式化程序并得到你除了什么。

关于php - 获取 Monolog JSON 堆栈跟踪作为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30607010/

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