Несколько регистраторов в одном классе с использованием механизма ведения журнала jboss7 по умолчанию

В основном мне нужно зарегистрировать два сообщения в одном классе с одним и тем же порогом регистратора, используя механизм ведения журнала jboss7. Подскажите, пожалуйста, как это можно сделать подробнее? Я следовал предложенному вами подходу и создал два обработчика периодического вращения файлов, как показано ниже.

            <periodic-rotating-file-handler name="FILE_DEBUG">
                <level name="DEBUG"/>
                <formatter>
                    <pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
                </formatter>
                <file relative-to="jboss.server.log.dir" path="File111_debug.log"/>
                <suffix value=".yyyy-MM-dd"/>
                <append value="true"/>
            </periodic-rotating-file-handler>

            <periodic-rotating-file-handler name="FILE_INFO">
                <level name="INFO"/>
                <formatter>
                    <pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
                </formatter>
                <file relative-to="jboss.server.log.dir" path="File222_info.log"/>
                <suffix value=".yyyy-MM-dd"/>
                <append value="true"/>
            </periodic-rotating-file-handler>

            <logger category="com.mypackage">
                <handlers>
                    <handler name="FILE_DEBUG"/>
                    <handler name="FILE_INFO"/>
                </handlers>
            </logger>

        <root-logger>
            <level name="DEBUG"/>
            <handlers>
                <handler name="CONSOLE"/>
            </handlers>
        </root-logger>

and in my class, I have declared as below,

package com.mypackage.log

ClassA{
private static final Logger loggerDebug = Logger.getLogger("FILE_DEBUG");
private static final Logger loggerInfo = Logger.getLogger("FILE_INFO");

method1()
{
    loggerDebug.debug("This message should be logged into  DEBUG log file");
        loggerInfo.info("This message should be logged into  INFO log file");
}

}

Несмотря на то, что новые файлы журнала были созданы в папке журнала, приведенные выше строки не печатаются в соответствующих файлах журнала.

Спасибо, если бы вы могли помочь мне проверить, что пошло не так в конфигурации?


person user2319311    schedule 25.04.2013    source источник


Ответы (1)


Вы можете назначить обработчики для регистратора, но все сообщения, зарегистрированные через этот регистратор, будут использовать указанные обработчики.

Самый простой способ решить эту проблему — использовать две разные категории регистраторов. Использование Logger.getLogger(Class<?>) — это просто ярлык для Logger.getLogger(Class<?>.getName()). Это означает, что вы можете сделать что-то вроде:

package com.example;

class ClassA {
    private static final Logger LOGGER1 = Logger.getLogger(ClassA.class.getName() + "1");
    private static final Logger LOGGER2 = Logger.getLogger(ClassB.class.getName() + "2");

    void method1() {
        LOGGER1.info("This message should be logged to a file called File111"); 
        LOGGER2.info("This message should be logged to a file called File222");
    }
}

Затем настройте подсистему ведения журнала следующим образом:

<subsystem xmlns="urn:jboss:domain:logging:1.1">
    ...
    <periodic-rotating-file-handler name="FILE1">
        <formatter>
            <pattern-formatter pattern="%d{HH:mm:ss,SSS} "/>
        </formatter>
        <file relative-to="jboss.server.log.dir" path="File111.log"/>
        <suffix value=".yyyy-MM-dd"/>
        <append value="true"/>
    </periodic-rotating-file-handler>
    <periodic-rotating-file-handler name="FILE2">
        <formatter>
            <pattern-formatter pattern="%d{HH:mm:ss,SSS} "/>
        </formatter>
        <file relative-to="jboss.server.log.dir" path="File222.log"/>
        <suffix value=".yyyy-MM-dd"/>
        <append value="true"/>
    </periodic-rotating-file-handler>

    <logger category="com.example1">
        <level name="INFO"/>
        <handlers>
            <handlers name="FILE1"/>
        </handlers>
    </logger>

    <logger category="com.example2">
        <level name="INFO"/>
        <handlers>
            <handlers name="FILE2"/>
        </handlers>
    </logger>
    ...
</subsystem>

Другим вариантом может быть использование фильтра в категории регистратора, но для этого потребуется знание некоторого шаблона относительно того, какое сообщение отправляется какому обработчику.

person James R. Perkins    schedule 25.04.2013
comment
Большое спасибо Джеймс за ваш немедленный ответ - person user2319311; 25.04.2013
comment
Я изменил вопрос, так как не смог вставить сюда содержание.. ценю ваш ответ - person user2319311; 25.04.2013
comment
Итак, вы хотите один с DEBUG и выше, а другой с INFO и выше? - person James R. Perkins; 25.04.2013
comment
в основном существуют существующие сообщения уровня «информация» и «отладка», которые записываются в файл. Но в соответствии с новым требованием мне нужно зарегистрировать еще несколько дополнительных информационных сообщений в паре ключ-значение, чтобы только эти сообщения нужно было регистрировать в другом файле, поскольку сообщения журнала, зарегистрированные в этом новом файле, будут подхвачены каким-то другим заявка на анализ. Пожалуйста, дайте мне знать, как лучше всего выполнить это требование. - person user2319311; 25.04.2013