Как преобразовать log4j.xml в logback.xml? - PullRequest
4 голосов
/ 16 ноября 2011

Я перехожу из log4j в logback, поэтому мне нужно преобразовать мой log4j.xml в logback.xml

Ответы [ 2 ]

3 голосов
/ 04 ноября 2015

Я столкнулся с той же проблемой и нашел лучшее решение.Прежде всего вам нужно начать с актуального 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) в библиотеках вашего проекта

0 голосов
/ 21 декабря 2011

Если вы можете перевести его вручную обратно в формат свойств log4j, вы можете использовать log4j.properties для переводчика logback.xml на сайте проекта Logback.

...