Java 将Wiremock配置为将log4j与自定义转换器一起使用
我将Wiremock作为一个独立进程运行(v2.5.1)。我已经通过扩展创建了一个Java自定义转换器:com.github.tomakehurst.wiremock.extension.ResponseTransformer 然后,我的自定义transformer使用其他一些使用Log4J进行日志记录的通用代码。代码如下:Java 将Wiremock配置为将log4j与自定义转换器一起使用,java,logging,log4j,slf4j,wiremock,Java,Logging,Log4j,Slf4j,Wiremock,我将Wiremock作为一个独立进程运行(v2.5.1)。我已经通过扩展创建了一个Java自定义转换器:com.github.tomakehurst.wiremock.extension.ResponseTransformer 然后,我的自定义transformer使用其他一些使用Log4J进行日志记录的通用代码。代码如下: import org.apache.log4j.Logger; 私有静态记录器=Logger.getLogger(CommonCode.class); ... logger
import org.apache.log4j.Logger;
私有静态记录器=Logger.getLogger(CommonCode.class);
...
logger.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详细日志记录转到单独的日志文件。任何帮助都将不胜感激。一旦我意识到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属性。我还显式地将属性文件添加到此类路径。这两种方法都不起作用(因此提出了这个问题)。我的自定义transformer类com.myorg.CustomTransformer也存在于一个jar中,该jar也位于lib目录中(已拾取)
然而,经过一些研究,我发现了两种方法来获取log4j属性文件
将log4j属性位置指定为批处理脚本中的另一个-D参数。如果我添加了-Dlog4j.configuration=file://c:/WireMock/lib/log4j.xml
更新我的自定义jar构建脚本,将log4j.xml文件本身包含在jar中