【问题标题】:How to escape spdlog message?如何转义 spdlog 消息?
【发布时间】:2019-10-04 09:09:00
【问题描述】:

我正在使用 spdlog 记录所有消息。我的日志模式是 JSON 格式。我在所有日志调用中手动转义消息。有没有办法在 spdlog 层自动转义消息?

手动转义示例:

spdlog::info(escape_message(data));

应该在spdlog层内自动处理:

spdlog::info(data);

【问题讨论】:

  • 你能给出一些示例代码来展示“手动转义”的样子吗?
  • @Eric 我已经更新了我的帖子。

标签: c++ c++17 spdlog


【解决方案1】:

告诉 spdlog 格式化单个字符串,而不是将字符串本身解释为格式字符串:

spdlog::info("{}", data);

【讨论】:

  • 感谢您的回答,我试过了,但还是不行。结果如下:{"message": "hi"hi"}。我通过std::cin (hi"hi) 获得了数据。
  • 您是如何构建 JSON 的?听起来您正在寻找 json 转义,而不是 spdlog 转义。你能澄清你的问题吗?我的印象是 data 本身包含 json,而您在嵌入 {} 字符时遇到了麻烦。
  • 我的数据不是 JSON,实际上,我的 spdlog 模式是 JSON 格式。例如:{"message": "%v"}。我的数据是一个字符串。
  • @mortezaipo:编辑你的问题会很好。你是对的,我的回答对你没有帮助。
【解决方案2】:

我找到了解决办法。

我应该实现一个自定义的formatter 类,然后在format 方法中,我通过例如escape_message(msg.payload.data()) 转义消息,然后在此方法中调用spdlog::log(msg.source, msg.level, escape_message(msg.payload.data()))spdlog::info 或...。

注意:在format 方法中我设置了一个日志模式,因为在类之外,如果我调用set_formatter,然后调用set_pattern,则效果不佳。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-05
  • 2019-04-22
  • 1970-01-01
  • 2013-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多