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

Php 获取Monolog JSON堆栈跟踪作为数组,php,laravel,monolog,Php,Laravel,Monolog,我使用的是Laravel4.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()

我使用的是Laravel4.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
实际上是一个异常,则可以将整个堆栈跟踪作为字符串获取。不幸的是,这是拉雷维尔的

以数组形式获取堆栈跟踪的正确方法是在as上下文中传递异常,以便它可以非字符串化地提供给格式化程序。例如:

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

您需要在Laravel的自定义异常处理程序中添加一些等效的内容,然后您可以使用适当的JSON格式设置程序来获取所需的内容。

看起来这是在最近的提交中添加的一项功能:哦,太酷了!此后,我编写了自己的JsonFormatter,它与他们添加的内容非常相似。特别是对于Laravel,它涉及的内容更多,所以有时我会发布我最终的工作。Laravel现在有了正确的日志记录方法:D源代码:
$logger->error($e->getMessage(),array_merge($this->context(),['exception'=>$e])