配置 Wiremock 以将 log4j 与自定义转换器一起使用

Configure Wiremock to use log4j with a Custom Transformer

我是 运行 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:

我希望此自定义日志记录与默认的 Wiremock 详细日志记录转到单独的日志文件。任何帮助将不胜感激。

一旦我意识到只是 log4j 找不到 log4j.properties 或 log4j.xml 文件,我就能够解决这个问题。基本上,log4j 属性文件必须位于 Wiremock Java 进程的 class 路径中。

我是 运行 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/*" 的 classpath 条目,其中包括 C:/WireMock/lib/* 它会获取我的 log4j 属性。我还明确地将属性文件添加到此 class 路径。这些都不起作用(因此这个问题)。我的自定义转换器 class com.myorg.CustomTransformer 也存在于 lib 目录(已拾取)中的 jar 中。

然而,经过一番研究后,我发现了两种获取 log4j 属性文件的方法。

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