Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 使用Poco库,如何在拆分器通道记录器中为每个通道设置不同的日志级别?_Logging_Poco Libraries - Fatal编程技术网

Logging 使用Poco库,如何在拆分器通道记录器中为每个通道设置不同的日志级别?

Logging 使用Poco库,如何在拆分器通道记录器中为每个通道设置不同的日志级别?,logging,poco-libraries,Logging,Poco Libraries,我现在所拥有的: Windows事件频道 简单文件通道 拆分器通道路由到两个通道 具有优先级信息级别的根记录器集 我希望在拆分器中每个通道具有不同的日志级别: Windows事件通道级别:警告 文件通道级别:信息 这样,只有警告以上的消息才会进入Windows事件查看器 这可以通过使用标准Poco::Logger以某种方式实现吗?日志记录级别是每个记录器,而不是每个通道,因此您必须有两个记录器。看见为了避免不得不记录两次同一事件带来的不便,您可以编写自己的“拆分器”函数来包装记录器,并

我现在所拥有的:

  • Windows事件频道
  • 简单文件通道
  • 拆分器通道路由到两个通道
  • 具有优先级信息级别的根记录器集

我希望在拆分器中每个通道具有不同的日志级别:

  • Windows事件通道级别:警告
  • 文件通道级别:信息
这样,只有警告以上的消息才会进入Windows事件查看器


这可以通过使用标准Poco::Logger以某种方式实现吗?

日志记录级别是每个记录器,而不是每个通道,因此您必须有两个记录器。看见为了避免不得不记录两次同一事件带来的不便,您可以编写自己的“拆分器”函数来包装记录器,并将相同的消息记录到两者。

有没有办法通过配置文件实现这一点?可以轻松创建两个记录器,但应用程序如何知道使用哪一个以及何时使用这两个记录器?我不确定我是否理解这个问题。您可以在配置文件中配置日志记录器,并且您必须为它们编写自己的包装器,它只需将日志消息转发给两个日志记录器;每个记录器都会相应地过滤和路由消息
//Windows Event Log
Poco::EventLogChannel* elChannel = new Poco::EventLogChannel("App");

//Simple file Log
Poco::SimpleFileChannel* sfChannel = new Poco::SimpleFileChannel();
sfChannel->setProperty("path", "log.txt");
sfChannel->setProperty("rotation", "10 M");

//Splitter Channel 
Poco::SplitterChannel* sChannel = new Poco::SplitterChannel();
sChannel->addChannel(sfChannel);
sChannel->addChannel(elChannel);

logger().root().setChannel(sChannel);
logger().root().setLevel(Poco::Message::PRIO_INFORMATION);