Я столкнулся с той же проблемой и нашел лучшее решение.Прежде всего вам нужно начать с актуального log4j.xml.У меня все еще были такие вещи, как теги category
и priority
, которые должны быть заменены соответственно на logger
и level
в конфигурации.Затем удалите все определенные дополнения, например RollingFileAppender
.Затем вам придется конвертировать их вручную.
Затем следуйте инструкциям из этого блога , чтобы преобразовать файл log4j.xml в файл logback.xml с использованием Xalan и фильтра преобразования XSLT.Поскольку содержание этого блога весьма ценно для моего ответа, я лично заверил, что эту статью можно найти на машине обратного хода на всякий случай.Также в статье не приведены версии необходимых библиотек.Вот тот, который я использовал:
- serializer-2.7.1
- xalan-2.7.0
- xercesImpl-2.6.2
- xml-apis-1.3.02
А вот командная строка, которая работала для меня (выполняется в той же папке, где все библиотеки и ресурсы были:
java -classpath xalan-2.7.0.jar org.apache.xalan.xslt.Process -IN log4j.xml -XSL log4j-to-logback.xsl -OUT logback.xml
Теперь большинство изработа уже сделана. Прежде всего я реорганизовал все регистраторы, как они были в исходном файле log4j.xml, для облегчения дальнейшего сравнения. Затем я вручную преобразовал специальные приложения. Это проще, чем кажется, документация довольно ясно. Вот пример (самый сложный, с которым мне приходилось иметь дело на самом деле):
<!-- Log4J Configuration -->
<appender name="myAppender" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="${catalina.base}/logs/myApp.log" />
<param name="Append" value="true" />
<param name="MaxFileSize" value="20MB" />
<param name="MaxBackupIndex" value="10" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %X{param} %-5p %m%n" />
</layout>
<filter class="org.apache.log4j.varia.StringMatchFilter">
<param name="StringToMatch" value="PATTERN1" />
<param name="AcceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.varia.StringMatchFilter">
<param name="StringToMatch" value="PATTERN2" />
<param name="AcceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.varia.DenyAllFilter"/>
</appender>
<!-- Logback configuration -->
<appender name="myAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${catalina.base}/logs/myApp.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${catalina.base}/logs/myApp.log.%i</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>20MB</maxFileSize>
</triggeringPolicy>
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator> <!-- defaults to type ch.qos.logback.classic.boolex.JaninoEventEvaluator -->
<expression>return message.contains("PATTERN1");</expression>
</evaluator>
<OnMismatch>NEUTRAL</OnMismatch>
<OnMatch>ACCEPT</OnMatch>
</filter>
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator> <!-- defaults to type ch.qos.logback.classic.boolex.JaninoEventEvaluator -->
<expression>return message.contains("PATTERN2");</expression>
</evaluator>
<OnMismatch>DENY</OnMismatch>
<OnMatch>ACCEPT</OnMatch>
</filter>
<encoder>
<pattern>%d %X{param} %-5p %m%n</pattern>
</encoder>
</appender>
Примечание: если ваша конфигурация требует использования таких фильтров оценки, как мой, вам потребуетсяобъявите janino и commons-compiler (ту же версию, что и slf4j) в библиотеках вашего проекта