2017-11-20 16 views
0

Wiremock을 독립 실행 형 프로세스 (v2.5.1)로 실행 중입니다. 나는 확장하여 자바 사용자 정의 변압기를 만들었습니다 : 내 사용자 정의 변압기는 다음 로깅의 log4j를 사용하는 다른 일반적인 코드를 사용사용자 지정 변압기와 함께 log4j를 사용하도록 WireMock 구성

com.github.tomakehurst.wiremock.extension.ResponseTransformer. 같은 코드로 :

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 자세한 로깅에서 별도의 로그 파일로 이동하고 싶습니다. 어떤 도움을 주시면 감사하겠습니다.

답변

0

일단 log4j가 log4j.properties 또는 log4j.xml 파일을 찾을 수 없다는 것을 알게되면이 문제를 해결할 수있었습니다. 기본적으로 Log4j 특성 파일은 Wiremock Java 프로세스의 클래스 경로에 있어야합니다.

나는이처럼 보였다 배치 스크립트를 통해 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/*"이라는 classpath 엔트리를 갖고 있었고, 그 안에는 C :/WireMock/lib/*이 포함되어있어서 log4j 속성을 선택할 것이라고 생각했습니다. 또한 명시 적으로 속성 파일을이 클래스 경로에 추가했습니다. 이들 중 어느 것도 효과가 없었다 (그러므로이 질문). 내 사용자 지정 변환기 클래스 com.myorg.CustomTransformer은 lib 디렉터리 (jar 파일)에 있습니다.

그러나 몇 가지 조사를 한 후에 log4j 속성 파일을 가져 오는 2 가지 방법을 발견했습니다.

  1. 는 배치 스크립트의 다른 -D 매개 변수로의 log4j 속성의 위치를 ​​지정합니다. 추가 한 경우 -Dlog4j.configuration=file://c:/WireMock/lib/log4j.xml
  2. log4j.xml 파일 자체를 jar 파일에 포함하도록 사용자 정의 jar 빌드 스크립트를 업데이트하십시오.