【问题标题】:Poco Logger change Message parametersPoco Logger 更改消息参数
【发布时间】:2016-01-21 13:06:41
【问题描述】:

我正在使用 Poco::Logger 来跟踪我的应用程序中的日志。

现在我想在我的所有日​​志中跟踪一个变量的值。因为我不想更改之前输出该行的每一行。我想将其设为默认格式。

查看了Poco测井系统的文档和教程,发现:

  • 消息可以存储任意数量的名称-值对。
  • 名称和值可以是任意字符串。
  • 可以在格式化程序中引用消息参数。

这看起来正是我正在寻找的。但我找不到有关此的详细信息,而且似乎 Poco::logger 自己创建了一个 Poco::Message。

有什么方法可以实现我想做的吗?谢谢。

【问题讨论】:

  • 我对POCO的日志框架不熟悉。似乎对于Poco::Logger::setProperty()“仅支持“通道”和“级别”属性”,这不是您所需要的。但是,您也许可以使用 Poco::Message::set() 附加您要跟踪的值。

标签: c++ logging poco-libraries


【解决方案1】:
#include "Poco/Logger.h"
#include "Poco/AutoPtr.h"
#include "Poco/PatternFormatter.h"
#include "Poco/FormattingChannel.h"
#include "Poco/ConsoleChannel.h"
#include "Poco/Message.h"

using namespace Poco;

int main()
{
    Message msg;
    msg.setSource("MySource");
    msg.setText("My message text");
    msg["myParam"] = "My Param";

    AutoPtr<FormattingChannel> pFCConsole = new FormattingChannel(new PatternFormatter("%s: %[myParam], %t"));
    pFCConsole->setChannel(new ConsoleChannel);
    pFCConsole->open();

    Logger& consoleLogger = Logger::root(); // or whatever your logger is
    consoleLogger.setChannel(pFCConsole);
    consoleLogger.log(msg);

    return 0;
}

运行:

$ ./Logger
MySource: My Param, My message text

目前仅支持 std::string 自定义参数,因此如果值为数字,则必须进行转换。

【讨论】:

  • 谢谢。但我的问题是我想将“myParam”添加到我曾经使用信息/警告/错误直接记录我的消息的任何地方。有没有什么地方可以做这种事情而不需要到处改变?
  • 是的,当然。我修改了答案中的代码以显示如何。现在,如果你想使用 error()、information() 等,你必须用这些方法将原始记录器包装到一个类中,并在将消息传递给原始记录器之前在内部构造消息。
  • 非常感谢,通过编写包装类解决了问题。
猜你喜欢
  • 1970-01-01
  • 2015-07-25
  • 2012-12-24
  • 1970-01-01
  • 2019-11-25
  • 2012-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多