Конфигурация плагина maven jetty log4j

у меня есть веб-приложение java с maven.
я использую причал для его запуска во время разработки (с помощью плагина maven jetty)

у меня есть файл log4j.properties, помещенный в src/main/resources, и он копируется в WEB-INF/classes при развертывании, как и ожидалось.

в моем файле log4j.properties я определил переменную фильтра, и при развертывании она также фильтруется с реальным значением.

в log4j.properties в src/main/resources;

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

в log4j.properties в разделе WEB-INF/classes (после развертывания с фильтрацией);

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

моя проблема; я получаю следующую ошибку, когда запускаю mvn jetty:run

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/main/resources (который имеет неприемлемый параметр файла appender), а не в WEB-INF/classes.

я хочу, чтобы плагин maven jetty игнорировал файл log4j.properties, который находится в src/main/resources, и видит тот, который находится в WEB-INF/classes. Как я могу это сделать?

или если эта ошибка не связана с моей идеей, как я могу это решить? Спасибо заранее.


person saban    schedule 03.02.2012    source источник


Ответы (1)


Я думаю, вы вряд ли можете гарантировать, какой из log4j.properties будет использоваться в вашей банке или в WEB-INF/classes. Это зависит от конкретной реализации загрузчика классов (в Tomcat или Jetty), которая может видеть либо WEB-INF/classes/log4j.properties, либо WEB-INF/libs/yourlib.jar:/log4j.properties. Так что вам нужно фильтровать здесь или там :)

Используя профили maven, вы можете настроить <excludes> для своих ресурсов и использовать этот профиль для создания веб-сайтов. приложение для развертывания Tomcat.

Возможно, лучшим решением будет переименование /src/main/resources/log4j.properties в /src/main/resources/log4j-jetty.properties, а затем настройка Log4j через плагин jetty для использования этого ресурса:

<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>
person dma_k    schedule 05.02.2012
comment
я решил это, добавив следующую строку внутри тега <webAppConfig>. <extraClasspath>${basedir}/target/classes/</extraClasspath> благодаря вашей помощи я отметил ваш ответ как ответ ;) - person saban; 10.02.2012