Ошибка регистрации в stderr и debug, информация в stdout с log4j
Я хочу, чтобы добавить ведение журнала в приложение я разрабатываю с помощью Apache log4j они. На данный момент я хочу, чтобы перенаправить все сообщения журнала, уровень и ниже (трассировки, отладки) в stdout и все другие сообщения журнала из предупредить и выше (ошибки, фатальные) в stderr. Например:
...
logger.info("Processing at some point"); // must be written to stdout
logger.debug("Point x was processed"); // must be written to stdout
logger.warn("Incorrect point config"); // must be written only to stderr
logger.error("Exception occurred at point x"); // must be written only to stderr
Так каким должен быть мой файл log4j.properties? Вот как он смотрит на этот моммент:
log4j.rootLogger=DEBUG, stdout, stderr
# configure stdout
# set the conversion pattern of stdout
# Print the date in ISO 8601 format
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold = DEBUG
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %-5p %d [%t][%F:%L] : %m%n
# configure stderr
# set the conversion pattern of stdout
# Print the date in ISO 8601 format
log4j.appender.stderr = org.apache.log4j.ConsoleAppender
log4j.appender.stderr.Threshold = WARN
log4j.appender.stderr.Target = System.err
log4j.appender.stderr.layout = org.apache.log4j.PatternLayout
log4j.appender.stderr.layout.ConversionPattern = %-5p %d [%t][%F:%L] : %m%n
проблема с вышеуказанной конфигурацией заключается в том, что регистратор.ошибка. )(.. печатается по слишком стандартный вывод.
6 ответов:
за предыдущий пост Джона Скита в Post
к сожалению нет максимум порог, так что везде, где вы получаете отладочные сообщения, вы также получаете предупреждающие сообщения. Это немного больно, ММО.
решается ниже также в формате файла свойств. Хитрость заключалась в том, чтобы получить правильное определение фильтра. Log4j свойства информация здесь
исходная попытка, измененная для фильтрации WARN & ERROR:
log4j.rootLogger=TRACE, stdout, stderr # configure stdout # set the conversion pattern of stdout # Print the date in ISO 8601 format log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Threshold = TRACE log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = %-5p %d [%t][%F:%L] : %m%n log4j.appender.stdout.filter.filter1=org.apache.log4j.varia.LevelRangeFilter log4j.appender.stdout.filter.filter1.levelMin=TRACE log4j.appender.stdout.filter.filter1.levelMax=INFO # configure stderr # set the conversion pattern of stdout # Print the date in ISO 8601 format log4j.appender.stderr = org.apache.log4j.ConsoleAppender log4j.appender.stderr.Threshold = WARN log4j.appender.stderr.Target = System.err log4j.appender.stderr.layout = org.apache.log4j.PatternLayout log4j.appender.stderr.layout.ConversionPattern = %-5p %d [%t][%F:%L] : %m%n
- вместо использования .свойства конфигурации вы должны использовать .конфигурация xml.
- In .XML config помещает элемент с именем " фильтр "типа" org.апаш.к log4j.Вигла.LevelRangeFilter " и установить его параметры
LevelMax
иLevelMin
.например, следующее .конфигурации XML определены два аппендеры: стандартный вывод, стандартный вывод. Stdout печатает все журналы, уровень которых меньше или равен INFO Для stdout, а stderr печатает все журналы с уровнем больше чем информация для stderr.
<?xml version="1.0" encoding="UTF-8"?> <!-- Document : log4j.xml Created on : 13 Δεκέμβριος 2011, 3:55 μμ Author : elitex Description : Purpose of the document follows. --> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" > <log4j:configuration> <appender name="stderr" class="org.apache.log4j.ConsoleAppender"> <param name="threshold" value="warn" /> <param name="target" value="System.err"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-5p %d [%t][%F:%L] : %m%n" /> </layout> </appender> <appender name="stdout" class="org.apache.log4j.ConsoleAppender"> <param name="threshold" value="debug" /> <param name="target" value="System.out"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-5p %d [%t][%F:%L] : %m%n" /> </layout> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMin" value="debug" /> <param name="LevelMax" value="info" /> </filter> </appender> <root> <priority value="debug"></priority> <appender-ref ref="stderr" /> <appender-ref ref="stdout" /> </root> </log4j:configuration>
для получения дополнительной информации смотрите:http://www.laliluna.de/articles/posts/log4j-tutorial.html
другой пример использования
ThresholdFilter
разметка из log4j2.<Console name="ConsoleERR" target="SYSTEM_ERR"> <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level - %msg%n"/> <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/> </Console>
посмотреть doc.
это Logback config, который делает именно(!) что вы просите:
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="true" scan="true" scanPeriod="30 seconds"> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <target>System.out</target> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <encoder> <pattern> %-4relative [%thread] %-5level %logger - %msg%n </pattern> </encoder> </appender> <appender name="STDERR" class="ch.qos.logback.core.ConsoleAppender"> <target>System.err</target> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>WARN</level> </filter> <encoder> <pattern> %-4relative [%thread] %-5level %logger - %msg%n </pattern> </encoder> </appender> <root level="${LOGBACK_ROOT_LEVEL:-INFO}"> <appender-ref ref="STDOUT" /> <appender-ref ref="STDERR" /> </root> </configuration>
изменение его на нейтральный и добавление фильтра для отладки должно позволить ему также захватывать отладку. Есть еще один встроенный фильтр, который требует чжэньину зависимость:
<filter class="ch.qos.logback.core.filter.EvaluatorFilter"> <evaluator> <expression> <![CDATA[ level > INFO ]]> </expression> </evaluator> <OnMatch>DENY</OnMatch> <OnMismatch>NEUTRAL</OnMismatch> </filter>