我正在从log4j转移到logback所以我需要将我的log4j.xml转换为logback.xml
答案 0 :(得分:3)
我遇到了同样的问题并找到了更好的解决方案。首先,您需要从最新的log4j.xml开始。我仍然有category
和priority
标签之类的内容,必须在配置中分别由logger
和level
替换。然后删除每个特定的appender,例如RollingFileAppender
。之后你必须手动转换它们。
然后按照this blog中的说明使用Xalan和XSLT转换过滤器将log4j.xml文件转换为logback.xml文件。由于这篇博客的内容对我的答案来说相当珍贵,我个人确保本文可以found in the wayback machine以防万一。此外,本文未提供所需库的版本。这是我使用的那个:
这是适用于我的命令行(在所有库和资源所在的同一文件夹中执行:
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文件中一样,以便于进一步比较。然后我手工转换了特殊的appender。它比看起来容易,documentation相当清晰。这是一个例子(实际上我必须处理的最复杂的事情):
<!-- 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相同的版本)
答案 1 :(得分:0)
如果您可以手动将其翻译回log4j属性格式,则可以在Logback项目网站上使用the log4j.properties to logback.xml translator。