Log4j2 xml configuration - Вход в файл и консоль (с разными уровнями)
Я хочу сделать две вещи:
- Войдите в консоль с определенным уровнем журнала
- Войдите в файл с другим уровнем журнала
Запись в консоль, похоже, работает нормально, но файл журнала остается пустым.
Это мой log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<File name="MyFile" fileName="logs/app.log" immediateFlush="true">
<PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</appenders>
<loggers>
<logger name="filelogger" level="error">
<appender-ref ref="MyFile"/>
</logger>
<root level="info">
<appender-ref ref="Console"/>
</root>
</loggers>
</configuration>
Что может быть неправильным?
Ответы
Ответ 1
Я понял это! Тег <Logger>
не следует использовать в этом случае, см. Ответ Gaurang Patel для деталей.
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<File name="MyFile" fileName="logs/app.log">
<PatternLayout pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</File>
</appenders>
<loggers>
<root level="debug">
<appender-ref ref="Console" level="info"/>
<appender-ref ref="MyFile" level="error"/>
</root>
</loggers>
</configuration>
Ответ 2
Хотя Дакер поставил исправленный файл конфигурации, но он не объяснил это. Я хотел бы добавить объяснение здесь. Как указано в документации Log4j2 здесь, использование <Logger> для данного требования не требуется. Далее, когда вы должны использовать <Logger> тег? Прочитайте ниже описание формы документации,
Возможно, желательно исключить весь выход TRACE из все, кроме com.foo.Bar. Простое изменение уровня журнала не будет выполнить задачу. Вместо этого решение заключается в добавлении нового регистратора определение конфигурации:
<Loggers>
<Logger name="com.foo.Bar" level="TRACE"/>
<Root level="ERROR">
<AppenderRef ref="STDOUT">
</Root>
...
</Loggers>
Ответ 3
<logger name="filelogger" level="error" >
Это должно быть проблемой. Имя регистратора обычно является именем вашего пакета (если вы не filelogger
его специально для filelogger
).
Попробуйте <logger name="com.yourpackage" level="error" additivity="true">
См. Log4j2 Doc
Ответ 4
Я использую <ThresholdFilter/>
и <AppenderRef level="">
чтобы сделать это
- Консоль: вывести все
- app.log :> = информация, кроме ошибок
- error.log :> = ошибка
УВИДЕТЬ
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="error" monitorInterval="5"> <!-- status:error mean ONLY show log4j kernel error log in console-->
<Properties>
<Property name="APP_LOG_ROOT">Your log path</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
</Console>
<RollingFile name="fileLogger" fileName="${APP_LOG_ROOT}/app.log" filePattern="${APP_LOG_ROOT}/app-%d{yyyy-MM-dd}.log">
<!-- Except Error -->
<ThresholdFilter level="error" onMatch="DENY" onMismatch="ACCEPT"/>
<PatternLayout>
<pattern>%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %level %logger{36} - %msg%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
</RollingFile>
<RollingFile name="errorLogger" fileName="${APP_LOG_ROOT}/error.log" filePattern="${APP_LOG_ROOT}/error-%d{yyyy-MM-dd}.log">
<PatternLayout>
<pattern>%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %level %logger{36} - %msg%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="trace" >
<AppenderRef ref="Console" level="trace" />
<AppenderRef ref="fileLogger" level="info" />
<AppenderRef ref="errorLogger" level="error" />
</Root>
</Loggers>
</Configuration>
Ответ 5
См. Пример, упомянутый в приведенном ниже URL-адресе для приложения Rolling File Appender, использующего URL-адрес Log4J2: https://howtodoinjava.com/log4j2/log4j-2-xml-configuration-example/
Надеюсь, это поможет.