Как сделать категории журнала Wildfly 9 с разными уровнями от root-logger?

Я читал здесь несколько сообщений о подобных проблемах, но никто не смог мне помочь. Я использую Wildfly 9.0.2 и хочу настроить его для ведения журнала следующим образом:

my.project.category = INFO
my.especial.project.category = DEBUG
остальное = WARN

Что я пытаюсь, без успеха:

<subsystem xmlns="urn:jboss:domain:logging:3.0">
    <console-handler name="MY_DEBUGGER_HANDLER">
        <level name="DEBUG"/>
        <formatter>
            <named-formatter name="COLOR-PATTERN"/>
        </formatter>
    </console-handler>
    <console-handler name="MY_INFO_HANDLER">
        <level name="INFO"/>
        <formatter>
            <named-formatter name="COLOR-PATTERN"/>
        </formatter>
    </console-handler>
    <console-handler name="CONSOLE">
        <level name="WARN"/>
        <formatter>
            <named-formatter name="COLOR-PATTERN"/>
        </formatter>
    </console-handler>
    <logger category="my.project.category" use-parent-handlers="false">
        <level name="INFO"/>
        <handlers>
            <handler name="MY_INFO_HANDLER"/>
        </handlers>
    </logger>
    <logger category="my.especial.project.category" use-parent-handlers="false">
        <level name="DEBUG"/>
        <handlers>
            <handler name="MY_DEBUGGER_HANDLER"/>
        </handlers>
    </logger>                        
    <root-logger>
        <level name="DEBUG"/>
        <handlers>                    
            <handler name="CONSOLE"/>
        </handlers>
    </root-logger>
    <formatter name="PATTERN">
        <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
    </formatter>
    <formatter name="COLOR-PATTERN">
        <pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
    </formatter>
</subsystem>

Проблема в том, что Wildfly отказывается регистрировать мои категории, пока я не изменю уровень обработчика CONSOLE или не добавлю свои дескрипторы в root-logger, который начинает регистрировать все категории с этим уровнем.

Не могли бы вы пролить свет и помочь мне?
Спасибо!


person Yoshimit    schedule 22.01.2018    source источник


Ответы (1)


Сам обработчик должен быть установлен на самый низкий уровень, который вы хотите зарегистрировать. Например, в обработчике по умолчанию CONSOLE, если вы хотите видеть DEBUG сообщений, вам нужно установить уровень обработчика как минимум DEBUG.

В приведенной выше конфигурации у вас есть от root-logger до DEBUG, что означает, что любая неопределенная категория будет регистрировать отладочные сообщения. Обычно вы не хотите, чтобы уровень корневого регистратора был установлен на таком низком уровне, так как это повлияет на производительность.

Учитывая ваши требования и предполагая конфигурацию по умолчанию, а не вашу конфигурацию выше, следующие команды CLI должны предоставить вам конфигурацию, которую вы ищете. Обратите внимание, что нет необходимости и не рекомендуется создавать несколько обработчиков консоли. Лучше всего позволить регистратору контролировать уровень.

my.project.category = ИНФОРМАЦИЯ my.especial.project.category = ОТЛАДКА остальных = ПРЕДУПРЕЖДЕНИЕ

/subsystem=logging/console-handler=CONSOLE:write-attribute(name=level, value=DEBUG)
/subsystem=logging/logger=my.project.category:add(level=INFO)
/subsystem=logging/logger=my.especial.project.category:add(level=DEBUG)
/subsystem=logging/root-logger=ROOT:write-attribute(name=level, value=WARN)

Вышеприведенное позволит обработчику консоли регистрировать любые сообщения DEBUG или выше. Ваш my.project.category будет входить в систему INFO, а ваш my.especial.project.category будет входить в систему DEBUG. Все другие неопределенные регистраторы будут регистрировать только WARN или выше.

person James R. Perkins    schedule 23.01.2018
comment
Привет, Джеймс. Большое спасибо за вашу помощь, но я все еще не вижу ИНФО-сообщений из своих категорий. Я понимаю, что раньше неправильно понимал конфиг, но, возможно, перепробовав столько всего, я что-то здесь сломал. Все приведенные выше команды принимаются, но сообщения INFO не отображаются в консоли Eclipse. Я не знаю, что мне не хватает. Мой фактический вырезанный файл standalone-full.xml выглядит следующим образом: paste.ee/p/fKTuv - person Yoshimit; 24.01.2018
comment
После некоторых тестов стало ясно, что после установки уровня root-logger на WARN сообщения INFO из my.project.category больше не появлялись. Сейчас я использую файл конфигурации по умолчанию. - person Yoshimit; 24.01.2018
comment
Эта конфигурация XML кажется мне правильной. Вы должны увидеть INFO сообщений из всех зарегистрированных сообщений с родительской категорией my.project.category. Они должны отображаться на консоли и в файле server.log. Как вы создаете свои регистраторы? Что-то вроде Logger.getLogger("my.project.category")? - person James R. Perkins; 24.01.2018
comment
Привет, Джеймс, я использую это: @Logger private Log log; а затем: log.info(сообщение) внутри метода. Logger — это аннотация Jboss Seam. - person Yoshimit; 24.01.2018
comment
Я думаю, что в качестве категории используется полное имя класса. Это означает, что ваш пакет должен начинаться с my.project.category, чтобы работать. - person James R. Perkins; 25.01.2018
comment
К сожалению, не сработало. Я пробовал это раньше. Все мои журналы ограничиваются уровнем корневого регистратора с использованием категории package as или FQCN. - person Yoshimit; 26.01.2018
comment
У вас есть пример сообщения журнала, которое вы ожидаете, но не видите? Пока имя регистратора является первой частью вашего пакета, оно должно работать. - person James R. Perkins; 27.01.2018
comment
Привет, Джеймс, вот мои фрагменты: paste.ee/p/KqN7z. Пришлось издеваться над настоящими именами (код не персональный). Как я уже сказал, все мои журналы ограничены уровнем root-logger. С моим фрагментом кода я вижу только ПРЕДУПРЕЖДЕНИЕ, независимо от того, из какого класса. Спасибо. - person Yoshimit; 31.01.2018
comment
Привет, @james! Какой-нибудь новый намек? Спасибо. - person Yoshimit; 07.02.2018
comment
Конфигурация выглядит нормально, поэтому трудно сказать, не зная больше кода, чтобы понять, что происходит. - person James R. Perkins; 08.02.2018