关于tomcat下多个工程配置一个log4j.properties,达到输出各自的日志的问题,
经过实际工作的总结和调查,在这里做出一个总结和备忘。
提起log4j的配置,我们常用的配置办法是为每个工程建立一个log4j.properties文件,并在其中写入自己的输出日志的信息。
但是我在工作中遇到一个问题,其实log4j.properties文件的加载与项目引用的jar包有着不可分割的关系。
我遇到的两种情况如下:
1、log4j.jar存在于每个工程的lib下
你的工程下的\WebRoot\WEB-INF\lib\路径下存在自己项目需要的jar包,log4j.jar存在于此路径下时,
当你的tomcat启动时,使用的是工程各自路径下的log4j.jar包来加载每个工程自己的log4j.properties。
这个时候每个项目都可以使用自己的工程下的WebRoot\WEB-INF\classes\log4j.properties配置,
输出各自指定的日志文件。
2、log4j.jar不存在于每个工程的lib下,统一调用tomcat的lib下的log4j.jar
这个时候,你会发现多个工程的log4j.properties一次被加载,但是后加载的会覆盖前面加载的配置内容。
导致所有的工程的log都打出在最后加载的工程的log4j.properties中设定的log文件中。
这个时候解决办法就是,把所有的工程的日志配置在同一个log4j.properties文件中。
然后将这个log4j.properties文件放到tomcat的Tomcat 6.0\webapps\ROOT\WEB-INF\下。
例:A工程和B工程两个部署在tomcat下的项目,log4j.properties的简单设定。
log4j.rootLogger=INFO
#========================================================================
#向控制台输出log信息
#========================================================================
log4j.category.com=INFO, CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{HH:mm:ss.SSS} %-5p %c %m%n
#========================================================================
# A项目log输出配置 文件大小到500KB时自动生成新log文件,最大生成10个
#========================================================================
log4j.category.com.a=INFO, ALOG
log4j.appender.ALOG.File=D:/workspace/Aproject/log/a-web-log.log
log4j.appender.ALOG=org.apache.log4j.RollingFileAppender
log4j.appender.ALOG.MaxFileSize=500KB
log4j.appender.ALOG.MaxBackupIndex=10
log4j.appender.ALOG.layout=org.apache.log4j.PatternLayout
log4j.appender.ALOG.layout.ConversionPattern=%d{MM/dd HH:mm:ss.SSS} %-5p %c %m%n
#========================================================================
# B项目log输出配置 文件大小到500KB时自动生成新log文件,最大生成10个
#========================================================================
log4j.category.com.b=INFO, BLOG
log4j.appender.BLOG.File=D:/workspace/Bproject/log/b-web-log.log
log4j.appender.BLOG.=org.apache.log4j.RollingFileAppender
log4j.appender.BLOG..MaxFileSize=500KB
log4j.appender.BLOG..MaxBackupIndex=10
log4j.appender.BLOG..layout=org.apache.log4j.PatternLayout
log4j.appender.BLOG..layout.ConversionPattern=%d{MM/dd HH:mm:ss.SSS} %-5p %c %m%n
关于log4j.properties具体的设定方式可参见其他文章的详细讲解,这里不做赘述。
需要注意的是,红字部分,是你的项目中需要输出log部分代码的包名。
A工程的功能代码保存的路径:Aproject\src\com\a\
B工程的功能代码保存的路径:Bproject\src\com\b\
也就是说,每个项目在开发时,最好在com下面用不重复的文件夹名来区分,这样才能区分输出日志时针对的工程。
工作中遇到的问题是最有价值的问题,我相信这也是我最宝贵的财富。
就算很简单的问题,我想也有它的价值,也许会帮助到许多人。
选择总结和整理,也恰恰是自己变得富有的第一步,希望我们都可以成为一个富有的人!