如果将应用程序部署为战争档案,则不会加载Logj4 [英] Logj4 is not loaded if application is deployed as a war archive

查看:75
本文介绍了如果将应用程序部署为战争档案,则不会加载Logj4的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一台具有很多Web应用程序目录的Tomcat 6服务器,并且已经设置了Log4J.它适用于所有不是通过war文件部署的应用程序目录.

I have a Tomcat 6 server with a lot of web application directories and I have set up Log4J. It works for all application directories which are not deployed via a war file.

当前配置如下:

/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

在每个Web应用程序中:

And in every single web application:

/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

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

Now the one that doesn't work: I have a file "homepageDev.war" inside my /content directory, that gets deployed every time I restart my Tomcat server, or if I trigger it manually.

/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)的大量调试信息.但是在homepageDev.war应用程序的情况下,我什么也没得到.

I have already set up Tomcat to start with Log4J in debug mode and I get a lot of debug information for the all the other applications (e.g. /pages). But in case of the homepageDev.war application I don't get anything.

日志中唯一的内容是:

[/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带有:

Inside my application I'm using Log4J as the following: I have servlets with a:

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

,然后在init方法中调用:

and in the init method I call:

logger.debug();

推荐答案

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

Log4j will only initialize itself once, using the thread's current class loader to load log4j.properties. So if app A loads first, then log4j will read app A's log4j.properties file and then never read another log4j.properties file ever again.

如果要能够在每个应用程序中单独使用log4j,则需要在每个Web应用程序的WEB-INF/lib中放置log4j-1.2.16.jar.

If you want to be able to use log4j separately in each application, then you need to put log4j-1.2.16.jar in WEB-INF/lib for each web application.

这篇关于如果将应用程序部署为战争档案,则不会加载Logj4的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆