Logback: как записывать в файл только ошибки

Я читал руководство по журналу в течение 2 часов и до сих пор не могу понять, как сделать то, что мне нужно.

Это так просто, как следует из названия: я хочу записывать только ошибки в файл, а остальные уровни (включая ERROR) на консоль.

Это корневой раздел моего файла logcat.xml:

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

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

Я мог бы позволить руту только с консолью и определить регистратор файлов:

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

Но тогда мне пришлось бы вызывать обычный регистратор следующим образом:

LoggerFactory.getLogger(ClientClass.class);

И файловый логгер вот такой:

LoggerFactory.getLogger("file_logger");

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

Это возможно?


person Mister Smith    schedule 30.10.2013    source источник
comment
Отвечает ли это на ваш вопрос? Как создать 2 разных корневых регистратора с логбэком?   -  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

См. ниже код:

<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