2012-02-03 3 views
1

나는 메이븐 (maven)이있는 자바 웹 앱을 가지고있다. 내가 개발하는 동안 그것을 실행하는 부두를 사용하고
배치 할 때maven jetty plugin log4j configuration

난 내 log4j.properties 파일이 SRC/메인/자원 아래에 배치 한

하고 WEB-INF/클래스에서 복사 (받는다는 부두 플러그인을 사용하여) 예상대로

내 log4j.properties 파일에 필터 변수를 정의하고 배포시 실제 값으로 필터링됩니다.

log4j.properties의 src/main/resources 아래에 있습니다. (필터링 후의 전개)가 WEB-INF/클래스 아래에 log4j.properties

log4j.appender.FILE.File = ${config-gui.log-file} 

;

log4j.appender.FILE.File = /tmp/mylogfile.log 

내 문제는; 내가 MVN 부두 실행할 때 나는 오류를 다음 받고 있어요 : 실행

log4j:ERROR setFile(null,true) call failed.<br /> 
java.io.FileNotFoundException: (No such file or directory) 
at java.io.FileOutputStream.openAppend(Native Method) 
at java.io.FileOutputStream.<init>(FileOutputStream.java:177) 
at java.io.FileOutputStream.<init>(FileOutputStream.java:102) 
at org.apache.log4j.FileAppender.setFile(FileAppender.java:289) 
at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:163) 
at org.apache.log4j.DailyRollingFileAppender.activateOptions(DailyRollingFileAppender.java:215) 
at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:256) 
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:132) 
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:96) 
at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:654) 
at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:612) 
at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:509) 
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:415) 
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:441) 
at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:470) 
at org.apache.log4j.LogManager.<clinit>(LogManager.java:122) 
at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73) 
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:88) 
at com.pribas.bucherplayerconfiggui.util.LoggerUtil.getLogger(LoggerUtil.java:10) 
at com.pribas.bucherplayerconfiggui.Initialization.<clinit>(Initialization.java:22) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
at java.lang.Class.newInstance0(Class.java:355) 
at java.lang.Class.newInstance(Class.java:308) 
at org.mortbay.jetty.webapp.WebXmlConfiguration.newListenerInstance(WebXmlConfiguration.java:649) 
at org.mortbay.jetty.webapp.WebXmlConfiguration.initListener(WebXmlConfiguration.java:630) 
at org.mortbay.jetty.webapp.WebXmlConfiguration.initWebXmlElement(WebXmlConfiguration.java:367) 
at org.mortbay.jetty.plus.webapp.AbstractConfiguration.initWebXmlElement(AbstractConfiguration.java:190) 
at org.mortbay.jetty.webapp.WebXmlConfiguration.initialize(WebXmlConfiguration.java:289) 
at org.mortbay.jetty.plus.webapp.AbstractConfiguration.initialize(AbstractConfiguration.java:133) 
at org.mortbay.jetty.webapp.WebXmlConfiguration.configure(WebXmlConfiguration.java:222) 
at org.mortbay.jetty.plus.webapp.AbstractConfiguration.configure(AbstractConfiguration.java:113) 
at org.mortbay.jetty.webapp.WebXmlConfiguration.configureWebApp(WebXmlConfiguration.java:180) 
at org.mortbay.jetty.plus.webapp.AbstractConfiguration.configureWebApp(AbstractConfiguration.java:96) 
at org.mortbay.jetty.plus.webapp.Configuration.configureWebApp(Configuration.java:124) 
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1217) 
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:510) 
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448) 
at org.mortbay.jetty.plugin.Jetty6PluginWebAppContext.doStart(Jetty6PluginWebAppContext.java:110) 
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39) 
at org.mortbay.jetty.plugin.AbstractJettyRunMojo$1.filesChanged(AbstractJettyRunMojo.java:409) 
at org.mortbay.util.Scanner.reportBulkChanges(Scanner.java:493) 
at org.mortbay.util.Scanner.reportDifferences(Scanner.java:359) 
at org.mortbay.util.Scanner.scan(Scanner.java:286) 
at org.mortbay.util.Scanner$1.run(Scanner.java:246) 
at java.util.TimerThread.mainLoop(Timer.java:512) 
at java.util.TimerThread.run(Timer.java:462) 

나는 펜더의 파일 PARAM가 아닌 한 SRC/메인/자원 아래 log4j.properties 파일을 (보고의 때문에이 오류가 생각 WEB-INF/classes 1 대신에 허용됨).

maven jetty plugin이 src/main/resources 아래에있는 log4j.properties 파일을 무시하고 WEB-INF/classes 아래에있는 것을 본다. 어떻게해야합니까?

이 오류가 관련이 없다면 어떻게 해결할 수 있습니까? thx 사전에.

답변

8

나는 log4j.properties 중 어느 것이 항아리에 사용되는지 또는 WEB-INF/classes에 사용되는지 거의 보장 할 수 없다고 생각합니다. 이는 구체적인 클래스 로더 구현 (Tomcat 또는 Jetty)에 따라 달라지며 WEB-INF/classes/log4j.properties 또는 WEB-INF/libs/yourlib.jar:/log4j.properties을 볼 수 있습니다. 그래서 당신은 여기 저기로 필터링해야합니다 :)

resources에 대해 <excludes>을 구성하고이 프로필을 사용하여 Tomcat 배포 용 웹 응용 프로그램을 빌드 할 수 있습니다.

어쩌면 더 나은 솔루션 /src/main/resources/log4j-jetty.properties-/src/main/resources/log4j.properties 이름을 변경하고 해당 자원을 사용하는 부두 플러그인을 통해의 Log4j를 구성됩니다

<plugin> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>maven-jetty-plugin</artifactId> 
    <configuration> 
     ... 
     <systemProperties> 
      <systemProperty> 
       <name>log4j.configuration</name> 
       <value>log4j-jetty.properties</value> 
      </systemProperty> 
     </systemProperties> 
    </configuration> 
</plugin> 
+0

내가''태그 내부에 다음 줄을 추가하여 그것을 해결합니다. ' $ {basedir}/target/classes/ ' 도움으로 답변을 작성했습니다. – saban