在Sentry中查看时,错误对象变为xdebug_message

如何解决在Sentry中查看时,错误对象变为xdebug_message

我目前设置了2个Monolog处理程序。 一个错误/异常重定向stderr,另一个将其发送到Sentry。

$pimple[Logger::class] =  function (ContainerInterface $container): Logger {
    $monologLogger = new Logger('logger');

    #Stream Logs to stderr
    $streamHandler = new StreamHandler('PHP://stderr');

    #Send Logs to Sentry
    \Sentry\init(
        [
            'dsn' => 'http://key@url/project_id','default_integrations' => false
        ]);

    $sentryHandler = new Handler(SentrySdk::getCurrentHub(),Logger::NOTICE);

    $jsonFormatter = new JsonFormatter();

    $streamHandler->setFormatter($jsonFormatter);
    $sentryHandler->setFormatter($jsonFormatter);

    $monologLogger->pushProcessor(function ($record) {
        if (isset($record['context']['error']) && is_array($record['context'])) {
            foreach ($record['context'] as $key => $value) {
                if ($key === 'tags') {
                    //Handled natively by Sentry monolog handler
                    continue;
                }
                $record['context']['extra'][$key] = is_string($value) && json_decode($value) !== null ? json_decode($value) : $value;
            }
        }
        return $record;
    });

    $monologLogger->pushHandler($streamHandler);
    $monologLogger->pushHandler($sentryHandler);

    return $monologLogger;
};

我的问题是,在查看stderr时,错误上下文看起来像这样,这正是我想要的样子,因为它可以告诉我准确地识别错误所需的知识。

"error":{"class":"Error","message":"Call to undefined function Presentation\\Web\\Action\\Nodes\\div()","code":0,"file":"/Presentation/Web/Action/Nodes/GetNodesAction.PHP:19"}

但这就是它们出现在Sentry中的方式,这使得很难正确阅读它。

"error":{ xdebug_message: 
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Error: Call to undefined function Presentation\Web\Action\Nodes\div() in /Presentation/Web/Action/Nodes/GetNodesAction.PHP on line <i>19</i></th></tr>
<tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr>
<tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr>
<tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0009</td><td bgcolor='#eeeeec' align='right'>471848</td><td bgcolor='#eeeeec'>{main}(  )</td><td title='/app/test/web/index.PHP' bgcolor='#eeeeec'>.../index.PHP<b>:</b>0</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>2</td><td bgcolor='#eeeeec' align='center'>0.0060</td><td bgcolor='#eeeeec' align='right'>472120</td><td bgcolor='#eeeeec'>require( <font color='#00bb00'>'/app/web/index.PHP'</font> )</td><td title='/app/test/web/index.PHP' bgcolor='#eeeeec'>.../index.PHP<b>:</b>14</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>3</td><td bgcolor='#eeeeec' align='center'>0.6470</td><td bgcolor='#eeeeec' align='right'>1460136</td><td bgcolor='#eeeeec'>Slim\App->run(  )</td><td title='/app/web/index.PHP' bgcolor='#eeeeec'>.../index.PHP<b>:</b>9</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>4</td><td bgcolor='#eeeeec' align='center'>0.7036</td><td bgcolor='#eeeeec' align='right'>1609552</td><td bgcolor='#eeeeec'>Slim\App->process(  )</td><td title='/app/vendor/slim/slim/Slim/App.PHP' bgcolor='#eeeeec'>.../App.PHP<b>:</b>297</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>5</td><td bgcolor='#eeeeec' align='center'>0.7511</td><td bgcolor='#eeeeec' align='right'>1740704</td><td bgcolor='#eeeeec'>Slim\App->callMiddlewareStack(  )</td><td title='/app/vendor/slim/slim/Slim/App.PHP' bgcolor='#eeeeec'>.../App.PHP<b>:</b>392</td></tr>
<tr><td bgcolor='#eeeeec' align='center'>6</td><td bgcolor='#eeeeec' align='center'>0.7511</td><td bgcolor='#eeeeec' align='right'>1740704</td><td bgcolor='#eeeeec'>Slim\App->Slim\{closure:/app/vendor/slim/slim/Slim/MiddlewareAwareTrait.PHP:63-78}(  )</td><td title='/app/vendor/slim/slim/Slim/MiddlewareAwareTrait.PHP' bgcolor='#eeeeec'>.../MiddlewareAwareTrait.PHP<b>:</b>117</td></tr>
... rest of the output omitted ...

有人知道我如何确保对象不变吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?