简体   繁体   English

如果有多个log4j.properties,则log4j的行为

[英]Behaviour of log4j in case of multiple log4j.properties

First off, I apologize if this question has already been asked. 首先,对于这个问题是否已经提出,我深表歉意。 I searched but couldn't find anything specific to my problem. 我搜索了但找不到与我的问题有关的任何东西。

Here's the scenario - I'm deploying an application, say, MyFirstWebApp in Tomcat 6.0.35. 这是场景-我正在Tomcat 6.0.35中部署一个应用程序,例如MyFirstWebApp。 Tomcat has a log4j.properties in it's common loader path which looks like - Tomcat的公共加载程序路径中有一个log4j.properties,看起来像-

log4j.rootLogger=INFO, LOGFILE

log4j.logger.com.test.java=DEBUG, TEST
log4j.additivity.com.test.java=false

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%p] %m%n

# LOGFILE is set to be a File appender using a PatternLayout
log4j.appender.LOGFILE=org.apache.log4j.RollingFileAppender
log4j.appender.LOGFILE.File=/home/myuserid/tomcat.log
log4j.appender.LOGFILE.MaxFileSize=25MB
log4j.appender.LOGFILE.MaxBackupIndex=5
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d %p %t %c - %m%n

# LOGFILE is set to be a File appender using a PatternLayout
log4j.appender.TEST=org.apache.log4j.FileAppender
log4j.appender.TEST.File=/home/myuserid/test.log
log4j.appender.TEST.layout=org.apache.log4j.PatternLayout
log4j.appender.TEST.layout.ConversionPattern=%d %p %t %c - %m%n

Tomcat also has a log4j.jar file in it's lib/ directory. Tomcat的lib /目录中也有一个log4j.jar文件。

Now, MyFirstWebApp has a log4j.properties inside it's WEB-INF/classes directory. 现在,MyFirstWebApp的WEB-INF / classes目录中有一个log4j.properties。 MyFirstWebApp also has a log4j.jar in it's WEB-INF/lib directory. MyFirstWebApp的WEB-INF / lib目录中也有一个log4j.jar。

MyFirstWebApp log4j.properties looks like this - MyFirstWebApp log4j.properties看起来像这样-

log4j.rootCategory=INFO,LOGFILE

# Set the enterprise logger priority to FATAL
log4j.logger.com.test=INFO

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%p] %m%n

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.RollingFileAppender
log4j.appender.LOGFILE.MaxFileSize=10MB
log4j.appender.LOGFILE.MaxBackupIndex=99
log4j.appender.LOGFILE.File=/home/myuserid/mywebapp.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n

When I start the server and deploy this application, I expected to find 3 log files - tomcat.log, test.log and mywebapp.log (which I did). 当我启动服务器并部署此应用程序时,我希望找到3个日志文件-tomcat.log,test.log和mywebapp.log(我做了)。 I also expected to find all logging from "com.test.java" package inside "test.log" but they were found in "mywebapp.log" 我还期望从“ test.log”内的“ com.test.java”包中找到所有日志记录,但它们在“ mywebapp.log”中找到

What am I doing wrong here? 我在这里做错了什么? How can I log messages from "com.test.java" without modifying MyFirstWebApp? 如何在不修改MyFirstWebApp的情况下记录来自“ com.test.java”的消息?

The log4j.properties file is loaded by the classloader. log4j.properties文件由类加载器加载。 All the classes in your webapp use the webapp's classloader, and thus only see the log4j.properties file that is under WEB-INF/classes . webapp中的所有类都使用webapp的类加载器,因此只能看到WEB-INF/classes下的log4j.properties文件。 And thus, the logs from com.test.java that are generated by classes of your webapp use the configuration found in WEB-INF/classes/log4j.properties . 因此,由webapp的类生成的com.test.java日志使用WEB-INF/classes/log4j.properties So they're written to mywebapp.log . 因此它们被写入了mywebapp.log

If you want the logs from com.test.java to go to test.log, you'll have to either modify the webapp's log4j.properties (right solution), or to put those classes out of the webapp, directly in tomcat's classpath (but don't do this). 如果您希望com.test.java的日志进入test.log,则必须修改webapp的log4j.properties(正确的解决方案),或者将这些类直接放在tomcat的classpath中(从webapp中删除)(但不要这样做)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM