2012-02-03 119 views
1

我有一個java web應用程序與maven。
我使用的碼頭開發過程中運行(通過使用maven碼頭插件)部署時maven jetty插件log4j配置

我已經在我的log4j.properties文件放在了src /主/資源,它是WEB-INF/classes目錄下複製如預期。

在我的log4j.properties文件中,我定義了一個過濾器變量,並且在部署時還用實際值進行過濾。

在src/main/resources下的log4j.properties中;

log4j.appender.FILE.File = ${config-gui.log-file} 
在WEB-INF /類(部署濾波之後)下log4j.properties

;

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) 

我認爲這個錯誤是因爲它看到log4j.properties文件是在src /主/資源(已添加器的文件參數是不可接受)而不是在WEB-INF/classes下。

我希望maven碼頭插件忽略src/main/resources下的log4j.properties文件,並在WEB-INF/classes下看到它。 我該怎麼做?

或者如果這個錯誤與我的想法沒有關係,我該如何解決? thx提前。

回答

8

我認爲,你幾乎不能保證log4j.properties將被用在你的罐子裏或WEB-INF/classes。它取決於具體的類加載器實現(在Tomcat或Jetty中),它可以參見WEB-INF/classes/log4j.propertiesWEB-INF/libs/yourlib.jar:/log4j.properties。所以你需要在這裏或那裏過濾:)

使用maven配置文件,你可以爲你的resources配置<excludes>,並使用此配置文件爲Tomcat部署構建Web應用程序。

也許更好的解決方案將被重命名/src/main/resources/log4j.properties/src/main/resources/log4j-jetty.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 2012-02-10 13:14:40