web 项目log4j配置无法获取文件(java.io.FileNotFoundException: /logs/log.txt (No such file or directory))猜想

现象:信息: No Spring WebApplicationInitializer types detected on classpath
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: /logs/log.txt (No such file or directory)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.(FileOutputStream.java:213)
at java.io.FileOutputStream.(FileOutputStream.java:133)
at org.apache.log4j.FileAppender.setFile(FileAppender.java:294)
at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165)
at org.apache.log4j.DailyRollingFileAppender.activateOptions(DailyRollingFileAppender.java:223)
at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104)
at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:809)
at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:735)
at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:615)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:502)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:547)
at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:483)
at org.apache.log4j.LogManager.(LogManager.java:127)
at org.apache.log4j.Logger.getLogger(Logger.java:104)
at org.apache.commons.logging.impl.Log4JLogger.getLogger(Log4JLogger.java:262)
at org.apache.commons.logging.impl.Log4JLogger.(Log4JLogger.java:108)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.apache.commons.logging.impl.LogFactoryImpl.createLogFromClass(LogFactoryImpl.java:1025)
at org.apache.commons.logging.impl.LogFactoryImpl.discoverLogImplementation(LogFactoryImpl.java:844)
at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:541)
at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:292)
at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:269)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:655)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:270)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5118)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5634)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1571)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1561)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

log4j:ERROR Either File or DatePattern options are not set for appender [logfile].

web.xml 产生问题配置:

<context-param>

<param-name>webAppRootPathparam-name>

<param-value>webapp.rootparam-value>

context-param>


<context-param>

<param-name>log4jConfigLocationparam-name>

<param-value>/WEB-INF/classes/log4j.propertiesparam-value>

context-param>


<context-param>

<param-name>log4jRefreshIntervalparam-name>

<param-value>3000param-value>

context-param>

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>

listener>

   


<listener>

<listener-class>org.springframework.web.util.IntrospectorCleanupListenerlistener-class>

listener>


<listener>

<listener-class>org.springframework.web.util.Log4jConfigListenerlistener-class>

listener>

    


log4j.properties 配置:

#DEBUG < INFO < WARN < ERROR < FATAL

log4j.rootLogger=DEBUG,console,logfile


#console configure

log4j.appender.console=org.apache.log4j.ConsoleAppender

log4j.appender.console.layout=org.apache.log4j.PatternLayout

log4j.appender.console.layout.ConversionPattern=[BIKE] %d{yyyy-MM-dd HH:mm:ss} [%5p] (%F:%L) - %m%n

log4j.appender.console.Encoding=UTF-8


#logfile configure

log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender

log4j.appender.logfile.File=${webapp.root}/logs/log.txt

log4j.appender.logfile.layout=org.apache.log4j.PatternLayout

log4j.appender.logfile.layout.ConversionPattern= %d %p [%c] - <%m>%n

log4j.appender.logfile.Threshold=INFO

log4j.appender.logfile.Encoding=UTF-8


log4j.logger.freemarker=FATAL

log4j.logger.org.springframework=WARN

log4j.logger.org.mybatis=DEBUG 

log4j.logger.net.sf.ehcache=ERROR


解决方法:把

<listener>

<listener-class>org.springframework.web.util.Log4jConfigListenerlistener-class>

listener>

移动所以

context-param 之后就行

解决后web.xml配置:

<context-param>

<param-name>webAppRootPathparam-name>

<param-value>webapp.rootparam-value>

context-param>


<context-param>

<param-name>log4jConfigLocationparam-name>

<param-value>/WEB-INF/classes/log4j.propertiesparam-value>

context-param>


<context-param>

<param-name>log4jRefreshIntervalparam-name>

<param-value>3000param-value>

context-param>

<listener>

<listener-class>org.springframework.web.util.Log4jConfigListenerlistener-class>

listener>

    


猜想:

此问题与web.xml加载顺序有关 “context-param -> listener -> filter -> servlet” ;

特别说明 如果在web.xml中已经配置了org.springframework.web.util.Log4jConfigListener这个监听器, 

则不需要配置WebAppRootListener了。因为Log4jConfigListener已经包含了WebAppRootListener的功能。 

WebAppRootListener要在ApplicationContext的ContextLoaderListener之前, 否则ApplicationContext的bean注入根目录值时会发生无法注入异常


你可能感兴趣的:(java,java,web,spring,maven)