Как войти в другой файл? log4j2

Мне нужно записывать всю информацию в info.log, все предупреждения в warn.log и т. Д. И все мои журналы в all.log. Я создал конфигурацию log4j2.xml.

<?xml version="1.0" encoding="UTF-8"?>
    <configuration monitorInterval = "3" status = "info">
        <appenders>
            <File name="ALL_LOG" fileName="logs/all.log">
                <PatternLayout pattern="%d{ISO8601} [%-5p] (%F:%L) - %m%n"/>
            </File>
            <File name="FILE_ERROR" fileName="logs/error.log">
                <PatternLayout pattern="%d{ISO8601} [%-5p] (%F:%L) - %m%n"/>
            </File>
            <File name="FILE_INFO" fileName="logs/info.log">
                <PatternLayout pattern="%d{ISO8601} [%-5p] (%F:%L) - %m%n"/>
            </File>
            <File name="FILE_DEBUG" fileName="logs/debug.log">
                <PatternLayout pattern="%d{ISO8601} [%-5p] (%F:%L) - %m%n"/>
            </File>
            <File name="FILE_WARN" fileName="logs/warn.log">
                <PatternLayout pattern="%d{ISO8601} [%-5p] (%F:%L) - %m%n"/>
            </File>
            <Console name="STDOUT" target="SYSTEM_OUT.log">
                <PatternLayout pattern="%d{ABSOLUTE} [%-5p] (%F:%L) - %m%n"/>
            </Console>
        </appenders>
        <loggers>
            <root>
                <appender-ref ref="ALL_LOG"/>
            </root>
            <root level="error">
                <appender-ref ref="STDOUT"/>
                <appender-ref ref="FILE_ERROR"/>
            </root>
            <root level="info">
                <appender-ref ref="FILE_INFO"/>
            </root>
            <root level="debug">
                <appender-ref ref="FILE_DEBUG"/>
            </root>
            <root level="warn">
                <appender-ref ref="FILE_WARN"/>
            </root>
        </loggers>
    </configuration>

В моей программе я определяю регистратор:

public class Main {

public static Logger LOG = Logger.getLogger(Main.class);

public static void main(String[] args) {
    LOG.debug("Debug message");
    LOG.warn("Warning message");
    LOG.info("Info message");
}

Но только в файле warn.log у меня Warning message, другие файлы создаются, но пустые. Что я делаю не так?


person Artyom Chebotaryov    schedule 27.04.2016    source источник
comment
Этот вопрос дублируется. Пожалуйста, посмотрите: stackoverflow.com/questions/1839647/ stackoverflow.com/questions/728295/   -  person Vargan    schedule 27.04.2016
comment
Варган, ответы, которые вы указали, относятся к Log4j 1.x. Это вопрос для Log4j 2.   -  person Remko Popma    schedule 28.04.2016


Ответы (1)


В конфигурации может быть только один регистратор. В этом корневом регистраторе определите несколько Appender-Refs, по одному для каждого приложения File.

  1. Для каждого Appender-Ref укажите уровень, чтобы отфильтровать слишком подробные события:

<Appender-ref ref="InfoFile" level="info" />

  1. Затем в каждом приложении File Appender есть фильтр, который ОТКАЗЫВАЕТ события, которые не соответствуют желаемому уровню. Это отфильтровывает слишком общие события. См. Пример в этом вопросе.
person Remko Popma    schedule 28.04.2016
comment
о, вы можете привести простой пример, пожалуйста? - person Artyom Chebotaryov; 29.04.2016