В моем приложении я загружаю конфигурацию для регистратора из файла конфигурации XML. Это отлично работает. Для моего Logger я настроен на каналы. Один, который входит в файл, а другой - в консоль.
С logger.getChannel()
я могу получить SplitterChannel
. Но мне нужен доступ к содержащим каналам. Но я не нашел способ получить 2 канала из 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>