[英]Get Monolog JSON Stack Trace as Array
我正在使用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的默认异常处理程序所做的 。
将堆栈跟踪作为数组获取的正确方法是在上下文中传递异常,以便不以字符串形式将其用于格式化程序。 例如:
Log::error($e->getMessage(), ['exception' => $e]);
等效的是您需要在Laravel的自定义异常处理程序中放入内容,然后可以使用适当的JSON格式化程序并获得您所需要的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.