【问题标题】:Log4j configuration for spring MVC app on TomcatTomcat 上 Spring MVC 应用程序的 Log4j 配置
【发布时间】:2011-11-08 16:07:41
【问题描述】:

我一直在开发一个简单的 Spring MVC 应用程序作为报告服务。在本地,我一直使用 maven-tomcat-plugin 运行应用程序,使用 mvn tomcat:run。这完全符合预期。但是,我现在尝试将此服务部署到运行 Tomcat 6 的服务器上。我将 war 文件加载到 webapps 目录中,Tomcat 注意到它,部署它,然后抱怨:

log4j:WARN No appenders could be found for logger
(org.springframework.web.filter.CharacterEncodingFilter).

log4j:WARN Please initialize the log4j system properly.

而且,不出所料,该服务没有日志记录。

我不清楚上面的错误消息,我想知道是否有人可以给我一些帮助。

为了后代,我有一个非常简单的 log4j.properties 文件(位于/src/main/resources):

log4j.rootLogger=WARN, console

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern= %d{HH:mm:ss,SSS} [%t] %-5p %x %C{1} : %m%n

log4j.logger.com.rtr=DEBUG

我目前的假设是 tomcat 盒子可能根本看不到这个属性包,但我不确定。我能够通过将捆绑包热复制到WEB-INF/classes 来确认这个假设,并获得了适当的结果。在类路径上但不在奇怪位置的正确位置是什么?

感谢任何指导。

【问题讨论】:

  • 你确认属性文件在war文件的/WEB-INF/classes吗?

标签: java spring tomcat log4j


【解决方案1】:

Maven 在 mvn 生命周期的 compile 阶段将资源文件从 /src/main/resources 复制到 /WEB-INF/classes。使用命令mvn war:war 将不会复制这些资源,因此您必须执行mvn compile war:war 才能使您的应用程序可以使用这些资源。

【讨论】:

    【解决方案2】:

    我相信log4j.properties 文件需要在类路径中才能自动获取。我一般是放在Tomcat的lib文件夹或者war的lib文件夹中。

    【讨论】:

    • 我试着把它放在src/main/webapp/WEB-INF/lib,但它似乎不起作用,所以继续沿着这条路走(这对我来说肯定有点味道),我将捆绑包热复制到@ 987654323@目录。当我这样做时,tomcat 发现这个包很好。奇怪吗?
    • src树中的目录不在WAR文件的类路径中。
    • @DwB 这是一个 Maven 项目; /src/main/resources 中的资源被复制到类目录中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多