LogBack: SiftingAppender больше не работает после обновления до 1.4
Мы используемch.qos.logback.classic.sift.SiftingAppender
чтобы создать отдельный файл журнала для каждого нашего импорта. Для этого мы создаем свойствоimportLogFile
и положить его вMDC
, конфиг выглядит следующим образом:
<appender name="MyImport" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<key>importLogFile</key>
<defaultValue>undefined</defaultValue>
</discriminator>
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator class="ch.qos.logback.classic.boolex.JaninoEventEvaluator">
<expression>
return mdc == null || mdc.get("importLogFile") == null;
</expression>
</evaluator>
<OnMismatch>NEUTRAL</OnMismatch>
<OnMatch>DENY</OnMatch>
</filter>
<sift>
<appender name="FILE-${importLogFile}" class="ch.qos.logback.core.FileAppender">
<file>${importLogFile}</file>
<append>false</append>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d %level %logger{35} - %msg%n</pattern>
</layout>
</appender>
</sift>
</appender>
Мы следовали документам в этом вопросе, см. здесь.
Это работало безупречно, пока мы использовали logback 1.2.x. Однако с обновлением до версии 1.3 процесс инициализации, похоже, изменился. Мы пытаемся использовать последнюю версию (1.4.4 (ch.qos.logback:logback-classic:1.4.4
), и теперь вместо отдельных файлов журнала мы получаем следующее сообщение об ошибке при запуске нашего веб-приложения:
Appender named [FILE-importLogFile_IS_UNDEFINED] not referenced. Skipping further processing.
ERROR in ch.qos.logback.classic.sift.SiftingAppender[MyImport] - AppenderFactory has not been set. Aborting
Я не нашел решения для этого в документации журнала. Были изменения, касающиеся использования вложенных приложений (некоторые другие сообщения журнала указывают на это), но, насколько я понимаю,SiftingAppender
на самом деле не подпадает под эту категорию - и упомянутые выше документы не были изменены, поэтому я думаю, что этот подход все еще должен быть действительным.
Советы и советы очень ценятся :-)
2 ответа
Попробуйте обернуть элемент макета в кодировщик следующим образом:
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d %level %logger{35} - %msg%n</pattern>
</layout>
</encoder>
Оказалось, что проблема заключалась в ошибке в Logback, подробности см. на https://jira.qos.ch/browse/LOGBACK-1713 .
С версией 1.4.6 все снова работает как положено - и это действительно здорово :-)