如何解决Drupal Syslog与JSON的奇怪行为
我在理解自己遇到的问题时遇到了一些麻烦。我正在使用Drupal syslog在文件上记录一些消息,并且文件上的结果与我var_dump消息时的结果不同。
这里是一个例子:
$logMsg = 'LOGGING TEST : {"test": "test","test1": {"test2": "test2","test3":"test3"}}';
print_r($logMsg);
\Drupal::logger('TestLog')
->log(0,$logMsg);
print_r
的结果很好:LOGGING TEST : {"test": "test","test3":"test3"}}
但是文件中的结果不正确:LOGGING TEST : @"test": "test","test3":"test3"}
经过几个小时的测试,我找不到为什么这样做,有人知道吗?
Drupal的版本是8.9.5和PHP 7.3.22。
谢谢
解决方法
这与 Drupal 记录器解析消息字符串的方式有关。
\Drupal::logger('TestLog')
返回一个 LoggerInterface
,记录在 https://api.drupal.org/api/drupal/vendor%21psr%21log%21Psr%21Log%21LoggerInterface.php/interface/LoggerInterface/9.1.x 处。 log()
方法记录在 https://api.drupal.org/api/drupal/vendor%21psr%21log%21Psr%21Log%21LoggerInterface.php/function/LoggerInterface%3A%3Alog/9.1.x 处。但答案实际上在 LoggerInterface
的文档中,而不是在 log()
的文档中:
消息可能包含以下形式的占位符:{foo},其中 foo 将被键“foo”中的上下文数据替换。
因此,不要将您的 JSON 字符串嵌入到 $message
中,而是这样做:
\Drupal::logger('TestLog')->log(
\Psr\Log\LogLevel::ERROR,"LOGGING TEST : {json_data}",[
'json_data' => '{"test": "test","test1": {"test2": "test2","test3":"test3"}}',]
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。