微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Drupal Syslog与JSON的奇怪行为

如何解决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 举报,一经查实,本站将立刻删除。