【问题标题】:Configure Wiremock to use log4j with a Custom Transformer将 Wiremock 配置为将 log4j 与自定义转换器一起使用
【发布时间】:2018-05-03 17:10:43
【问题描述】:

我将 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 详细日志记录转到单独的日志文件。任何帮助将不胜感激。

【问题讨论】:

    标签: java logging log4j slf4j wiremock


    【解决方案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 构建脚本,将 log4j.xml 文件本身包含在 jar 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-20
      • 1970-01-01
      • 1970-01-01
      • 2020-08-28
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      相关资源
      最近更新 更多