繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM