在我的应用程序中,我从XML配置文件加载了Logger的配置。这很好。对于我的记录仪,我必须配置通道。一个记录到文件,另一个记录到控制台。
使用logger.getChannel()
,我可以获得SplitterChannel
。但是我需要访问包含的频道。但是我没有找到从SplitterChannel
这是加载日志记录配置的代码:
if (Poco::File{ configPath }.exists()) {
try {
Poco::AutoPtr<Poco::Util::AbstractConfiguration> loggingConfig{ new Poco::Util::XMLConfiguration{configPath.toString()} };
Poco::Util::LoggingConfigurator logConf;
logConf.configure(loggingConfig);
auto logFilePath = loggingConfig->getString("logging.channels.c1.path");
Poco::File logFile{ Poco::Path{logFilePath}.parent() };
if (!logFile.path().empty() && !logFile.exists()) {
logFile.createDirectories();
}
Poco::AutoPtr<Poco::Util::AbstractConfiguration> linesyncView{ loggingConfig->createView("LineSync") };
displayThreadNames = linesyncView->getBool("displayThreadNames", false);
} catch (const Poco::Exception&) {
poco_error(logger, "Could not load Config File");
}
}
这是“日志记录配置”:
<config>
<logging>
<channels>
<c1>
<class>FileChannel</class>
<path>C:\Log\log.log</path>
<rotation>100 M</rotation>
<archive>timestamp</archive>
<compress>true</compress>
<formatter>
<class>PatternFormatter</class>
<pattern>%L%d-%m-%Y;%H:%M:%S;%s(%U [%u] );[%p %I];%t</pattern>
</formatter>
</c1>
<c2>
<class>ColorConsoleChannel</class>
<pattern>%s(%U [%u]): [%p %I] %t</pattern>
</c2>
<splitter>
<class>SplitterChannel</class>
<channels>c1,c2</channels>
</splitter>
</channels>
<loggers>
<root>
<channel>splitter</channel>
<level>information</level>
</root>
</loggers>
</logging>
</config>