您的位置:首页 > 运维架构 > Tomcat

tomcat下多个web应用使用相同的log4j的jar包,如何避免配置文件发生冲突

2015-03-25 17:36 417 查看
我们在开发的时候通常会遇到再同一个服务器下开发多个应用的情况,在公共jar包统一加载的情况下,如果log4j.properties配置不当,经常会发生多个应用的log日志都打印到一个文件里了,如果配置文件配置的是输出所有log打印,那么web应用的加载顺序就是导致这个问题的根本原因,由于配置tomcat加载web应用的顺序是一件比较繁琐的事情,除非各个应用有强依赖关系,否则一般不建议去配置加载顺序;这样就会导致后加载的应用对log4j的配置覆盖了之前应用的配置,最终所有log输出都会出现在最后加载的应用所配置的log文件;

那么知道的原因之后,我们就可以寻找相应的解决方法了,这里仅提供两种作者觉得比较简单且实用的方法;

第一种:将log4j的jar包移除统一加载的lib库,放入单独应用中各自加载,这样就不会发生配置覆盖的情况;

第二种:在log4j.properties配置category属性,该属性可以理解为根类过滤参数,还是实例说明吧,比如你做如下设置

 

### set log levels ###
log4j.rootLogger = INFO

### 输出到控制台 ###
<span style="background-color: rgb(255, 0, 0);">log4j.category.com = INFO, console </span>
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

### 云平台INFO ###
<span style="background-color: rgb(255, 0, 0);">log4j.category.com.test.cloud = INFO, LOG_TESTCLOUD</span>
log4j.appender.LOG_TESTCLOUD = org.apache.log4j.RollingFileAppender
log4j.appender.LOG_TESTCLOUD .File = /logs/TestCloud/TestCloud.log
log4j.appender.LOG_TESTCLOUD .MaxFileSize = 500KB
log4j.appender.LOG_TESTCLOUD .MaxBackupIndex = 10
log4j.appender.LOG_TESTCLOUD .layout = org.apache.log4j.PatternLayout
log4j.appender.LOG_TESTCLOUD .layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}
注意红色标记部分即是设置category属性,经过上述设置之后,所有在com之下的子包(子类)所打印的log都将输出到控制台,所有在com.test.cloud之下的子包(子类)所打印的log信息,都将写入/logs/TestCloud/TestCloud.log文件;

所以建议不同web应用都要有不同的根包名,以便进行过滤;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  tomcat log4j