Регистриране: как да регистрирате само грешки във файл

Четох ръководството за logback от 2 часа и все още не мога да разбера как да направя това, от което се нуждая.

Толкова е просто, както се казва в заглавието: искам да регистрирам само грешките във файл, а другите нива (включително ГРЕШКА) да се конзолират.

Това е основният раздел на моя файл logcat.xml:

    <root level="TRACE" >
        <appender-ref ref="CONSOLE_APPENDER" />
        <appender-ref ref="FILE_APPENDER" />
    </root>

Проблемът с тази конфигурация е, че регистрира всяко ниво >= TRACE към двата допълнителя.

Бих могъл да пусна root само с конзола и да дефинирам регистратор на файлове:

    <logger name='file_logger' level='ERROR' >
        <appender-ref ref="FILE_APPENDER" />
    </logger>

Но тогава ще трябва да извикам нормалния регистратор по следния начин:

LoggerFactory.getLogger(ClientClass.class);

И регистраторът на файлове като този:

LoggerFactory.getLogger("file_logger");

Не искам да избирам регистратора за всеки клас. Просто искам да получа root регистратора от фабриката, използвайки класа като параметър, и да го накарам да направи правилното нещо в зависимост от нивото.

Възможно ли е това?


person Mister Smith    schedule 30.10.2013    source източник
comment
Това отговаря ли на въпроса ви? Как да създадете 2 различни ROOT регистратори с logback?   -  person rogerdpack    schedule 19.12.2019


Отговори (3)


Поставете това в дефиницията на приложението за добавяне на файлове:

    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>ERROR</level>
    </filter>

ThresholdFilter е в logback-classic.jar.

person steffen    schedule 30.10.2013
comment
хубаво. Използвам logback за android и изглежда също работи. - person Mister Smith; 30.10.2013
comment
Това също може да помогне; XSD за logback.xml. Това може да ви помогне с конфигурационните променливи. github.com/enricopulatzo/logback-XSD - person az3; 21.11.2014
comment
Благодаря, вашият подход проработи. Това обаче проваля цялата цел на атрибута level на маркера root, тъй като това е основната му характеристика - определяне на нивото на журнала на допълнителя. - person skryvets; 22.07.2019

Не разбирам защо грешен отговор тук е гласуван. Човекът иска САМО съобщения за грешка във файла си.

Ето правилния отговор:

<filter class="ch.qos.logback.classic.filter.LevelFilter">
  <level>ERROR</level>
  <onMatch>ACCEPT</onMatch>
  <onMismatch>DENY</onMismatch>
</filter>

Справка: https://logback.qos.ch/manual/filters.html#levelFilter

person Anton Pryamostanov    schedule 27.11.2018
comment
Това е така, защото гласуваното решение използва ThresholdFilter, който филтрира всичко под грешката. - person Kratos; 06.03.2019
comment
Аз разбирам, че. Не разбирам как се справя с проблема, поставен от автора. Авторът иска да регистрира САМО грешки във файла. - person Anton Pryamostanov; 07.03.2019
comment
Добра точка. Останалите от нас предположиха, че иска грешка и по-висока :) актуализация: появява се в logback land ГРЕШКАТА е най-високото ниво, за разлика от log4j, който има фатална цифра за излизане...logback.qos.ch/manual/architecture.html#basic_selection - person rogerdpack; 19.12.2019
comment
Мисля, че отговорът трябва да бъде точно обратното на това. ACCEPT и DENY трябва да разменят местата си - person Hardik Rana; 04.05.2020

Вижте кода по-долу:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>DENY</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
person Hardik Rana    schedule 04.05.2020