Невозможно использовать Splitterchannel с расширенной конфигурацией XML с POCO

StackOverflow https://stackoverflow.com//questions/25075345

Вопрос

Я хотел бы настроить предварительный регистратор, используя POCO и его файл конфигурации. Я создаю файл config.xml такой:

<?xml version="1.0" ?>
<Application>
    <logging>
        <channels>
            <c1>
                <class>ColorConsoleChannel</class>
                <formatter>
                    <class>PatternFormatter</class>
                    <pattern>%Y-%m-%d %H:%M:%S : %s : [%p] : %t</pattern>
                </formatter>
                <traceColor>lightBlue</traceColor>
                <debugColor>blue</debugColor>
                <informationColor>green</informationColor>
                <noticeColor>green</noticeColor>
                <warningColor>yellow</warningColor>
                <errorColor>red</errorColor>
                <criticalColor>lightMagenta</criticalColor>
                <fatalColor>lightMagenta</fatalColor>       
            </c1>
            <c2>
                <class>FileChannel</class>
                <path>logs/traceApplication.log</path>
                <rotation>1 M</rotation>
                <archive>number</archive>
                <purgeCount>5</purgeCount>
                <formatter>
                    <class>PatternFormatter</class>
                    <pattern>%Y-%m-%d %H:%M:%S : %T : [%p] : %t</pattern>

                </formatter>
            </c2>
        </channels>
        <loggers>
            <consoleLogger>
                <channel>c1</channel>
                <level>information</level>
            </consoleLogger>
            <traceFileLogger>
                <channel>c2</channel>
                <level>trace</level>
            </traceFileLogger>
        </loggers>
        <channels>
            <cSplitter>
                <class>SplitterChannel</class>
                <channels>consoleLogger,traceFileLogger,mainFileLogger</channels>
            </cSplitter>
        </channels>
        <loggers>
            <root>
                <channel>cSplitter</channel>
                <level>trace</level>
            </root>
        </loggers>
    </logging>
</Application>
.

Я использую Poco :: util :: класс ServerApplication и в методе INateialize I PUT:

void CBS2AudioVideo::initialize(Poco::Util::Application& self)
{
    loadConfiguration("config.xml");
    Poco::Util::ServerApplication::initialize(self);
}
.

Перед добавлением SplitterChannel моя регистрация работает хорошо, но с ним это не больше.

Я получил сообщение об ошибке:

не найден: канал регистрации: consolelogger

Моя цель - иметь только один корневой регистратор и когда я его использую, он входит в систему на уровне информации в консоль и на уровне трассировки в файл.

Когда я устанавливаю каналы в каналах .Csplitter.Channels он работает, но все каналы регистрируются на тот же уровень. И если я возьму в лесозаготовительному конфигурации слайд ( http://pocoproject.org/slids/185-loggingConfigration. PDF ) Они используют регистраторы и не каналы в регионе. Channels.splitter.Chaneels атрибута атрибута. Так что я думаю, что это возможно. Подробнее о классе регистратора наследует от канала тоже.

Кто-то уже сделал эту работу или иметь идею?

Это было полезно?

Решение

Я наконец нашел решение. Я публикую это здесь, если это интересует кого-то.

Этот файл хорошо работает.

<?xml version="1.0" ?>
<Application>
    <logging>
        <channels>
            <cScreen>
                <class>ColorConsoleChannel</class>
                <formatter>
                    <class>PatternFormatter</class>
                    <pattern>%H:%M:%S : %T : [%p] : %t</pattern>
                </formatter>
                <traceColor>lightBlue</traceColor>
                <debugColor>blue</debugColor>
                <informationColor>white</informationColor>
                <noticeColor>green</noticeColor>
                <warningColor>yellow</warningColor>
                <errorColor>red</errorColor>
                <criticalColor>lightMagenta</criticalColor>
                <fatalColor>lightMagenta</fatalColor>       
            </cScreen>
            <cFile>
                <class>FileChannel</class>
                <path>logs/application.log</path>
                <rotation>1 M</rotation>
                <archive>number</archive>
                <purgeCount>5</purgeCount>
                <formatter>
                    <class>PatternFormatter</class>
                    <pattern>%H:%M:%S : %T : [%p] : %t</pattern>
                </formatter>
            </cFile>
        </channels>
        <loggers>
            <root>
                <name></name>
                <channel>cFile</channel>
                <level>trace</level>
            </root>
            <main>
                <name>main</name>
                <channel>cScreen</channel>
                <level>trace</level>
            </main>
        </loggers>
    </logging>
.

Чтобы войти на экран и в файле сделать:

Poco::Logger::get("main").trace(msg);
.

Чтобы войти только в файл make

Poco::Logger::get("").trace(msg);
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top