如果将应用程序部署为war存档,则不会加载Logj4

时间:2015-09-24 10:26:55

标签: java tomcat servlets log4j war

我有一个带有很多Web应用程序目录的Tomcat 6服务器,我已经设置了Log4J。它适用于通过war文件 not 部署的所有应用程序目录。

当前配置如下所示:

/tomcat/lib/log4j.properties

# Define all the appenders
log4j.appender.root=org.apache.log4j.RollingFileAppender 
log4j.appender.root.File=${catalina.base}/logs/tomcat.log
log4j.appender.root.Append=true
log4j.appender.root.MaxFileSize=1MB
log4j.appender.root.MaxBackupIndex=5
log4j.appender.root.Encoding=UTF-8
log4j.appender.root.layout=org.apache.log4j.PatternLayout
log4j.appender.root.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

# Configure which loggers log to which appenders
log4j.rootLogger=INFO, root

在每个网络应用程序中:

/content/pages/WEB-INF/classes/log4j.properties

log4j.appender.root=org.apache.log4j.RollingFileAppender
log4j.appender.root.File=${catalina.base}/logs/pages/root.log
log4j.appender.root.Append=true
log4j.appender.root.MaxFileSize=1MB
log4j.appender.root.MaxBackupIndex=5
log4j.appender.root.Encoding=UTF-8
log4j.appender.root.layout=org.apache.log4j.PatternLayout
log4j.appender.root.layout.ConversionPattern=%-5p %d (%c)%m%n

log4j.appender.pages=org.apache.log4j.RollingFileAppender
log4j.appender.pages.File=${catalina.base}/logs/pages/pages.log
log4j.appender.pages.Append=true
log4j.appender.pages.MaxFileSize=1MB
log4j.appender.pages.MaxBackupIndex=5
log4j.appender.pages.Encoding=UTF-8
log4j.appender.pages.layout=org.apache.log4j.PatternLayout
log4j.appender.pages.layout.ConversionPattern=%d [%t] %-5p %c- %m%n

log4j.rootLogger=WARN, root
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[content].[/pages]=WARN, pages

现在是一个不起作用的人:我有一个文件" homepageDev.war"在my / content目录中,每次重新启动Tomcat服务器时都会部署,或者我手动触发它。

/content/homepageDev/WEB-INF/classes/log4j.properties

log4j.appender.root=org.apache.log4j.RollingFileAppender 
log4j.appender.root.File=${catalina.base}/logs/homepage_dev/root.log
log4j.appender.root.Append=true
log4j.appender.root.MaxFileSize=1MB
log4j.appender.root.MaxBackupIndex=5
log4j.appender.root.Encoding=UTF-8
log4j.appender.root.layout=org.apache.log4j.PatternLayout
log4j.appender.root.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.homepage=org.apache.log4j.RollingFileAppender
log4j.appender.homepage.File=${catalina.base}/logs/homepage_dev/homepage_dev.log
log4j.appender.homepage.Append=true
log4j.appender.homepage.MaxFileSize=1MB
log4j.appender.homepage.MaxBackupIndex=5
log4j.appender.homepage.Encoding=UTF-8
log4j.appender.homepage.layout=org.apache.log4j.PatternLayout
log4j.appender.homepage.layout.ConversionPattern=%-5p %d (%c)%m%n

log4j.rootLogger=DEBUG, root
log4j.logger.com.mycompany.web.homepage=DEBUG, homepage

我已经设置了Tomcat以在调试模式下启动Log4J,并且我获得了所有其他应用程序(例如/ pages)的大量调试信息。但是在主页Dev.war应用程序的情况下,我什么也得不到。

日志中唯一的东西是:

[/manager]- Manager: deploy: Deploying web application at '/homepageDev'
[/manager]- Manager: Uploading WAR file to /content/homepageDev.war
Deploying web application archive homepageDev.war

在我的应用程序中,我使用Log4J,如下所示:我有一个带有以下内容的servlet:

private static Logger logger = Logger.getLogger(DatabaseJsonServlet.class);

并在init方法中调用:

logger.debug();

1 个答案:

答案 0 :(得分:0)

Log4j只会初始化一次,使用线程的当前类加载器来加载log4j.properties。因此,如果应用A首先加载,则log4j将读取应用A的log4j.properties文件,然后再也不会再读取另一个log4j.properties文件

如果您希望能够在每个应用程序中单独使用log4j,则需要在log4j-1.2.16.jar中为每个Web应用程序添加WEB-INF/lib