如何将log4j.xml转换为logback.xml?

如何将log4j.xml转换为logback.xml?,log4j,logback,Log4j,Logback,我正在从log4j转换为logback,因此如果您可以手动将log4j.xml转换为logback.xml,并将其转换为logback项目站点上使用的log4j属性格式,那么我需要将log4j.xml转换为logback.xml。首先,您需要从最新的log4j.xml开始。我的仍然有category和priority标记,这些标记必须在配置中分别被logger和level替换。然后删除每个特定的appender,例如RollingFileAppender。之后您必须手动转换这些 然后按照中的说明

我正在从log4j转换为logback,因此如果您可以手动将log4j.xml转换为logback.xml,并将其转换为logback项目站点上使用的log4j属性格式,那么我需要将log4j.xml转换为logback.xml。首先,您需要从最新的log4j.xml开始。我的仍然有
category
priority
标记,这些标记必须在配置中分别被
logger
level
替换。然后删除每个特定的appender,例如
RollingFileAppender
。之后您必须手动转换这些

然后按照中的说明使用Xalan和XSLT转换过滤器将log4j.xml文件转换为logback.xml文件。由于这篇博客的内容对我的回答来说相当珍贵,我个人保证这篇文章可以以防万一。此外,本文没有给出所需库的版本。以下是我使用的一个:

  • 序列化程序-2.7.1
  • xalan-2.7.0
  • xercesImpl-2.6.2
  • xml-API-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文件中一样,以便于进一步比较。然后,我手动转换了特殊的附加器。这比看起来更容易,结果相当清楚。下面是一个示例(实际上我必须处理的最复杂的):


${catalina.base}/logs/myApp.log
${catalina.base}/logs/myApp.log。%i
1.
10
20MB
返回消息。包含(“模式1”);
中立的
接受
返回消息。包含(“模式2”);
否认
接受
%d%X{param}%-5p%m%n

注意:如果您的配置需要使用像我这样的计算器过滤器,那么您需要声明janino和commons编译器(与slf4j版本相同)在您的项目库中

请重写您的问题:此处的软件建议与主题无关。链接已断开该工具仍列在的侧栏中,但它现在似乎与主QoS站点(Logback背后的家伙/公司)一起出现问题。
<!-- 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>