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 все снова работает как положено - и это действительно здорово :-)

Другие вопросы по тегам