Настройте Wiremock для использования log4j с настраиваемым преобразователем

Я запускаю Wiremock как автономный процесс (v2.5.1). Я создал собственный преобразователь Java, расширив: com.github.tomakehurst.wiremock.extension.ResponseTransformer

Затем мой пользовательский преобразователь использует другой общий код, который использует Log4J для ведения журнала. С кодом вроде:

import org.apache.log4j.Logger; private static Logger logger = Logger.getLogger(CommonCode.class); ... logger.error("This is some error");

Есть ли способ настроить Wiremock для вывода этого настраиваемого журнала? Я пробовал поместить файлы log4j.xml и log4j.properties в путь к классам. Вот пример файла свойств:

log4j.appender.CUSTOMAPPENDER=org.apache.log4j.RollingFileAppender
log4j.appender.CUSTOMAPPENDER.File=c:/WireMock/logs/custom.log
log4j.appender.CUSTOMAPPENDER.layout=org.apache.log4j.PatternLayout

log4j.logger.com.myorg=DEBUG, CUSTOMAPPENDER

Эквивалентный файл log4j.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="CUSTOMAPPENDER" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="file" value="C:/WireMock/logs/custom.log"/>
        <param name="datePattern" value="'.'yyyy-MM-dd"/>
        <param name="append" value="true"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{MMM dd HH:mm:ss}] [%r] %5p [%t] (%F:%L) - %m%n"/>
        </layout>
    </appender>
    <logger name="com.myorg" additivity="false">
        <level value="DEBUG"/>
        <appender-ref ref="CUSTOMAPPENDER"/>
    </logger>   
</log4j:configuration>

У меня также есть следующие JAR в моем пути к классам:

  • log4j-1.2.17.jar
  • slf4j-api-1.7.2.jar
  • slf4j-log4j12-1.7.2.jar

Я бы хотел, чтобы это настраиваемое ведение журнала перешло в отдельный файл журнала из подробного журнала Wiremock по умолчанию. Любая помощь будет оценена.


person ptha    schedule 20.11.2017    source источник


Ответы (1)


Как только я понял, что log4j просто не может найти файл log4j.properties или log4j.xml, я смог решить проблему. Обычно файл свойств log4j должен находиться в пути к классам Java-процесса Wiremock.

Я запускал Wiremock Server через пакетный скрипт, который выглядел так:

"C:/Java/jdk1.8.0_102/bin/java" -Dfile.encoding=UTF-8 -cp "C:/WireMock/lib/wiremock-standalone-2.5.1.jar;C:/WireMock/lib/*" com.github.tomakehurst.wiremock.standalone.WireMockServerRunner --port="9091" --extensions "com.myorg.CustomTransformer" --root-dir="C:/WireMock" --verbose > "C:/WireMock/logs/wiremock.log"

Мой файл log4j.xml находился в моем каталоге C: / WireMock / lib. Я предположил, что, поскольку у меня была запись пути к классам cp "C:/WireMock/lib/wiremock-standalone-2.5.1.jar;C:/WireMock/lib/*", которая включала C: / WireMock / lib / *, он заберет мои свойства log4j. Я также явно добавил файл свойств в этот путь к классам. Ни один из них не работал (отсюда и вопрос). Мой собственный класс преобразователя com.myorg.CustomTransformer присутствует в банке также в каталоге lib (который выбран).

Однако после некоторых исследований я нашел 2 способа получить файл свойств log4j.

  1. Укажите расположение свойств log4j в качестве другого параметра -D в пакетном скрипте. Если я добавил -Dlog4j.configuration=file://c:/WireMock/lib/log4j.xml
  2. Обновите мой собственный сценарий сборки jar, чтобы включить в него сам файл log4j.xml.
person ptha    schedule 22.11.2017