我在Tomcat6下部署的apring webapp中的日志设置有问题。
webapp使用commons-logging api,在运行时应该使用log4j。日志文件已创建,但仍为空-未出现任何日志条目。
设置如下:
WEB-INF/web.xml:
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>WEB-INF/classes/commons-logging.properties:
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLoggerWEB-INF/log4j.xml:
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
...
</appender>
<appender name="FILE" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="${catalina.home}/logs/my.log"/>
...
</appender>
<logger name="my.package">
<level value="INFO"/>
</logger>
<root>
<level value="ERROR"/>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</log4j:configuration>创建了文件logs/my.log,但不显示任何日志。这是tomcat控制台上的信息日志,但没有配置布局模式。
commons-logging-1.1.1.jar和log4j-1.2.14.jar包含在WEB-INF/lib中。你知道这里出了什么问题吗?
发布于 2008-10-20 15:11:24
web上有大量有文档记录的实例,警告人们如何使用commons-logging。正因为如此,SLF4J正变得越来越受欢迎。
考虑到您对在Log4j中使用Tomcat不感兴趣,您应该直接在应用程序中使用Log4j。特别是如果您将来没有机会切换日志记录框架的话。它将降低应用程序的复杂性,并消除commons-logging带来的任何类加载器问题。
在您的文本中,这应该是一个相对容易的搜索和替换方法,因为commons-logging和log4j对它们的日志方法都使用了类似的调用结构。
发布于 2008-10-22 18:25:57
要特别小心,不要让将log4j.jar放在Tomcat commons/lib目录中。如果根类加载器加载log4j库,那么当您的when应用程序也尝试使用log4j时,您将遇到冲突和初始化问题。
如果您需要使用log4j来执行常见的Tomcat日志记录,则需要注意您的well应用程序不会尝试加载log4j。如果您在服务器上有多个webapp,那么您需要遵守规则,使每个webapp的日志初始化不会影响其他webapp的初始化。每个webapp将需要使用唯一的Logger ID,这可以通过唯一的包名来完成。
在Tomcat中使用多个webapp的公共log4j会导致严重的冲突,因为您拥有的共享库都想做日志记录,比如Hibernate或Spring。下一个尝试初始化log4j的one应用程序可能会关闭前一个应用程序的记录器。它可以是一团糟。
发布于 2011-04-01 08:23:43
我也有类似的问题,现在找到了解决方法。使用附加参数启动tomcat:
-Dorg.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl
https://stackoverflow.com/questions/217929
复制相似问题