如果将应用程序部署为战争档案,则不会加载Logj4 [英] Logj4 is not loaded if application is deployed as a war archive
问题描述
我有一台具有很多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屋!