配置Wiremock以将log4j与Custom Transformer配合使用

时间:2017-11-20 13:05:12

标签: java logging log4j slf4j wiremock

我正在运行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

我希望此自定义日志记录从Default Wiremock verbose日志记录转到单独的日志文件。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

一旦我意识到log4j无法找到log4j.properties或log4j.xml文件,我就能解决问题。基本上,log4j属性文件必须位于Wiremock Java进程的类路径中。

我通过批处理脚本运行Wiremock服务器,如下所示:

"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目录中的一个jar中(已被拾取)。

然而,经过一些研究,我找到了两种方法来获取log4j属性文件。

  1. 将log4j属性位置指定为批处理脚本中的另一个 -D 参数。如果我添加了-Dlog4j.configuration=file://c:/WireMock/lib/log4j.xml
  2. 更新我的自定义jar构建脚本,将jar4j.xml文件包含在jar中。