<;log4j:WARN找不到记录器(org.springframework.web.servlet.DispatcherServlet)的追加器;

<;log4j:WARN找不到记录器(org.springframework.web.servlet.DispatcherServlet)的追加器;,log4j,web.xml,Log4j,Web.xml,我使用的技术有: Maven Spring Oracle Weblogic Eclipse 项目文件结构如下所示: src/main/java/... src/main/resources/Log4j.properties src/test/java/... src/test/resources/... WebContent/META-INF/... WebContent/WEB-INF/MyServletController-servlet.xml WebContent/WEB-INF/we

我使用的技术有:

Maven
Spring
Oracle Weblogic
Eclipse
项目文件结构如下所示:

src/main/java/...
src/main/resources/Log4j.properties
src/test/java/...
src/test/resources/...
WebContent/META-INF/...
WebContent/WEB-INF/MyServletController-servlet.xml
WebContent/WEB-INF/web-xml
WebContent/WEB-INF/weblogic.xml
WebContent/index.html
在每节课开始的时候

 private Logger log = LoggerFactory.getLogger(MyClass.class);
我可以用它记录项目

log.debug("Some message");
我的Log4j.properties看起来很正常:

# Root logger option
log4j.rootLogger=DEBUG, trace, stdout, file

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold=trace
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{HH:mm:ss} %-5p %c{1}:%L - %m%n

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
#log4j.appender.TextProcessor.Threshold=debug
log4j.appender.file.File=E:\\logs\\evaluator-log.txt
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{HH:mm:ss} %-5p %c{1}:%L - %m%n

log4j.logger.statsLogger=trace, stats
# Direct stats to a log file - this appender should be controlled by a separate logger call in the code.
log4j.appender.stats=org.apache.log4j.RollingFileAppender
log4j.appender.TextProcessor.Threshold=debug
log4j.additivity.statsLogger=false
log4j.appender.stats.append=true
log4j.appender.stats.File=E:\\logs\\evaluator-stats.txt
log4j.appender.stats.MaxFileSize=10MB
log4j.appender.stats.MaxBackupIndex=1
log4j.appender.stats.layout=org.apache.log4j.PatternLayout
log4j.appender.stats.layout.ConversionPattern=%m%n
# TRACE,
# DEBUG,
# INFO,
# WARN,
# ERROR
# FATAL

#Define custom levels by package
log4j.logger.org.springframework=DEBUG
当我在eclipse中手动运行代码时,日志工作正常,并打印到控制台和文件中

但是,当我尝试将其部署到weblogic时,weblogic日志会告诉我:

<log4j:WARN No appenders could be found for logger (org.springframework.web.servlet.DispatcherServlet).> 

现在我明白了这是因为Log4j不知道在哪里可以找到Log4j.properties文件

通过谷歌搜索,可以得到很多结果,比如

将日志配置上下文参数添加到web.xml


log4jConfigLocation
类路径:/main/resources/Log4j.properties
这就产生了同样的错误

向web.xml添加日志配置和侦听器

org.springframework.web.util.Log4jConfigListener


log4jConfigLocation
classpath:/main/resources/log4j.xml
这给

weblogic.application.ModuleException: 

java.lang.Exception: Exception received from deployment driver. See Error Log view for more detail.
    at oracle.eclipse.tools.weblogic.server.internal.DeploymentProgressListener.watch(DeploymentProgressListener.java:188)
    at 
<snip>
Caused by: java.lang.IllegalStateException: Cannot set web app root system property when WAR file is not expanded

    at org.springframework.web.util.WebUtils.setWebAppRootSystemProperty(WebUtils.java:158)
    at org.springframework.web.util.Log4jWebConfigurer.initLogging(Log4jWebConfigurer.java:117)
    at org.springframework.web.util.Log4jConfigListener.contextInitialized(Log4jConfigListener.java:46)
    at
<snip>
weblogic.application.ModuleException:
java.lang.Exception:从部署驱动程序接收到异常。有关详细信息,请参阅错误日志视图。
位于oracle.eclipse.tools.weblogic.server.internal.DeploymentProgressListener.watch(DeploymentProgressListener.java:188)
在
原因:java.lang.IllegalStateException:未展开WAR文件时无法设置web应用程序根系统属性
位于org.springframework.web.util.WebUtils.setWebAppRootSystemProperty(WebUtils.java:158)
位于org.springframework.web.util.log4jwebconfig.initLogging(log4jwebconfig.java:117)
位于org.springframework.web.util.Log4jConfigListener.contextInitialized(Log4jConfigListener.java:46)
在

有人能用简单的英语解释一下Log4j是如何查找Log4j.properties的,以及我如何配置我的应用程序来告诉它在哪里吗?

我在Java的入口点使用了这个代码片段

Properties props = new Properties();
props.load(getClass().getResourceAsStream("/log4j.properties"));
PropertyConfigurator.configure(props);
weblogic.application.ModuleException: 

java.lang.Exception: Exception received from deployment driver. See Error Log view for more detail.
    at oracle.eclipse.tools.weblogic.server.internal.DeploymentProgressListener.watch(DeploymentProgressListener.java:188)
    at 
<snip>
Caused by: java.lang.IllegalStateException: Cannot set web app root system property when WAR file is not expanded

    at org.springframework.web.util.WebUtils.setWebAppRootSystemProperty(WebUtils.java:158)
    at org.springframework.web.util.Log4jWebConfigurer.initLogging(Log4jWebConfigurer.java:117)
    at org.springframework.web.util.Log4jConfigListener.contextInitialized(Log4jConfigListener.java:46)
    at
<snip>
Properties props = new Properties();
props.load(getClass().getResourceAsStream("/log4j.properties"));
PropertyConfigurator.configure(props);