使用 Poco 库,如何在拆分器通道记录器中为每个通道设置不同的日志级别?
Using Poco library, how to set different log levels per channel in a splitter channel logger?
我现在拥有的:
- Windows 活动频道
- 简单文件通道
- 分离器通道路由到两个通道
- 根记录器设置为 PRIO_INFORMATION 级别
.
//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);
我希望拆分器中的每个通道具有不同的日志级别:
- Windows 事件通道级别:警告
- 文件频道级别:INFORMATION
这样只有警告以上的消息才会转到 Windows 事件查看器。
可以使用标准 Poco::Logger 以某种方式实现吗?
记录级别是每个记录器,而不是每个通道,因此您必须有两个记录器。参见 Logger example。为避免必须将同一件事记录两次带来的不便,您可以编写自己的 "splitter" 函数来包装记录器并将相同的消息记录到两者。
这是一个简单的例子。
#include "Poco/Logger.h"
using Poco::Logger;
int main(int argc, char** argv)
{
Logger& logger = Logger::get("TestLogger");
logger.information("This is an informational message");
logger.warning("This is a warning message");
return 0;
}
更多详情:
https://pocoproject.org/slides/110-Logging.pdf
这里有一些关于其他 Poco 子系统的有价值的幻灯片
https://pocoproject.org/slides/
我希望链接不会被破坏 :)
我现在拥有的:
- Windows 活动频道
- 简单文件通道
- 分离器通道路由到两个通道
- 根记录器设置为 PRIO_INFORMATION 级别
.
//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);
我希望拆分器中的每个通道具有不同的日志级别:
- Windows 事件通道级别:警告
- 文件频道级别:INFORMATION
这样只有警告以上的消息才会转到 Windows 事件查看器。
可以使用标准 Poco::Logger 以某种方式实现吗?
记录级别是每个记录器,而不是每个通道,因此您必须有两个记录器。参见 Logger example。为避免必须将同一件事记录两次带来的不便,您可以编写自己的 "splitter" 函数来包装记录器并将相同的消息记录到两者。
这是一个简单的例子。
#include "Poco/Logger.h"
using Poco::Logger;
int main(int argc, char** argv)
{
Logger& logger = Logger::get("TestLogger");
logger.information("This is an informational message");
logger.warning("This is a warning message");
return 0;
}
更多详情:
https://pocoproject.org/slides/110-Logging.pdf
这里有一些关于其他 Poco 子系统的有价值的幻灯片
https://pocoproject.org/slides/
我希望链接不会被破坏 :)