log4j多配置文件处理

时间:2022-04-28 10:42:36

log4j多配置文件处理

 

         关于log4j的常用配置以及相关配置格式,详细配置可以参考:http://blog.csdn.net/yeruby/article/details/51719333

         关于web项目中,出现的log4j多配置文件,不同模块打印日志到不同文件中的相关配置及注意,做如下记录:

一、web项目中添加log4j支持,该web项目已添加spring框架

1.添加log4j相关jar包到项目中,并再src目录下创建log4j.properties主文件,文件配置示例如下:

log4j.rootLogger=INFO,C,D,E
#log4j.rootCategory=INFO
#rootCategory为旧版本中使用的配置,rootLogger为rootCategory的子类
#自定义样式
# %r 时间 0
# %t 方法名 main
# %p 优先级 DEBUG/INFO/ERROR
# %c 所属类的全名(包括包名)
# %l 发生的位置,在某个类的某行
# %m 输出代码中指定的讯息,如log(message)中的message
# %n 输出一个换行

### console ###
log4j.appender.C = org.apache.log4j.ConsoleAppender
log4j.appender.C.Target = System.out
log4j.appender.C.layout = org.apache.log4j.PatternLayout
log4j.appender.C.layout.ConversionPattern = [production2][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n

### log file ###
log4j.appender.D=org.apache.log4j.RollingFileAppender
log4j.appender.D.File=${catalina.home}/logs/production2/production2.log
log4j.appender.D.MaxFileSize=20MB
log4j.appender.D.MaxBackupIndex=20
log4j.appender.D.Append = true
log4j.appender.D.Threshold = INFO
log4j.appender.D.layout=org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern= [production2][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n

### exception ###
log4j.appender.E = org.apache.log4j.RollingFileAppender
log4j.appender.E.File =${catalina.home}/logs/production2/production2_error.log
log4j.appender.E.MaxFileSize=20MB
log4j.appender.E.MaxBackupIndex=20
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout=org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern= [production2][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n

注意:其中${catalina.home}为Tomcat中的一个全局变量,值为tomcat根目录在文件系统中的绝对路径,该处log4j.appender.D.File为日志打印文件的路径,该处配置可用绝对路径也可以用相对路径。建议使用绝对路径(例如上),相对路径并不一定是相对webapps目录的相对路径,该相对路径是相对于tomcat的启动路径。linux系统中,启动tomcat时,执行命令时所在的目录时不固定的,所以建议使用绝对路径。

2.web项目的核心配置文件web.xml中添加log4j监听器及相关参数,配置如下:

<!--在Web Container启动时将把ROOT的绝对路径写到系统变量里。 然后log4j的配置文件里就可以用${webName.root }来表示Web目录的绝对路径,例如:tomcat/webapps/production2 -->
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>production.root</param-value>
</context-param>
<!--Spring默认刷新Log4j配置文件的间隔,单位为millisecond 可选配置-->
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>600000</param-value>
</context-param>
<!-- Log4j配置文件的位置-->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>
<!-- Web 项目 Spring 加载 Log4j 的监听 -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

注意:webAppRootKey参数,必须设置,如果未设置则缺省值为‘webapp.root’,如果有多个项目未配置,多个项目间则会出现重名冲突,在服务器(Tomcat)启动时,会出现部分项目启动失败现象

3.在项目中使用log4j打印日志:先获取Logger对象,再通过logger对象调用info,debug,error等打印日志,简单示例如下:

package com.supre.test;

import org.apache.log4j.Logger;

public class Test {

private static Logger log = Logger.getLogger(Test.class);

public String testLog(String name){
log.info("入参 name:" + name);
String result = null;
try {
result = name;
log.debug(" test ");
} catch (Exception e) {
e.printStackTrace();
log.error(" 接口异常 ");
}
log.info("result:"+result);
return result;
}

}

二、其他模块添加log4j支持,配置单独log4j配置文件,采用不用的日志配置策略

1.添加log4j的配置文件(位置可选,也可将配置写在主配置文件中如三),例如msglog4j.properties,示例配置如下:

#log4j.rootLogger=INFO,appender1
log4j.logger.imagedb=INFO,appender2,appender1
#自定义样式
# %r 时间 0
# %t 方法名 main
# %p 优先级 DEBUG/INFO/ERROR
# %c 所属类的全名(包括包名)
# %l 发生的位置,在某个类的某行
# %m 输出代码中指定的讯息,如log(message)中的message
# %n 输出一个换行

#输出到控制台
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
log4j.appender.appender1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] -%m%n
#设置输出样式
log4j.appender.appender2=org.apache.log4j.RollingFileAppender
log4j.appender.appender2.File=${catalina.home}/logs/production2/imagedb.log
log4j.appender.appender2.MaxFileSize=20MB
log4j.appender.appender2.MaxBackupIndex=20
log4j.appender.appender2.layout=org.apache.log4j.PatternLayout
log4j.appender.appender2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] -%m%n

注意:其他模块的log4j配置文件中,不能出现log4j.rootLogger配置项,该配置项为log4j的root配置,由log4j主配置文件配置,其他模块中用log4j.logger.modelName来配置,其中modelName为自定义的模块名,在后续代码中获取Logger对象时用到,

        

2.模块中加载log4j配置文件和获取Logger对象,格式如下:

加载配置文件

PropertyConfigurator.configure(filePath);

filePath为log4j配置文件的绝对路径

获取Logger对象

Logger log = Logger.getLogger("imagedb")

imagedb为上述配置文件中配置的模块名

         日志的打印同上,使用Logger对象调用info,debug,error等方法打印日志


三、多配置可以直接合并到一个配置文件中,通过配置logger来区分,例如上述配置文件,合并如下:

log4j.rootLogger=INFO,C,D,E
log4j.logger.imagedb=INFO,appender1,appender2

### console ###
log4j.appender.C = org.apache.log4j.ConsoleAppender
log4j.appender.C.Target = System.out
log4j.appender.C.layout = org.apache.log4j.PatternLayout
log4j.appender.C.layout.ConversionPattern = [manage][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n

### log file ###
log4j.appender.D=org.apache.log4j.RollingFileAppender
log4j.appender.D.File=../logs/production2/production2.log
log4j.appender.D.MaxFileSize=20MB
log4j.appender.D.MaxBackupIndex=20
log4j.appender.D.Append = true
log4j.appender.D.Threshold = INFO
log4j.appender.D.layout=org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern= [manage][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n

### exception ###
log4j.appender.E = org.apache.log4j.RollingFileAppender
log4j.appender.E.File =../logs/production2/production2_error.log
log4j.appender.E.MaxFileSize=20MB
log4j.appender.E.MaxBackupIndex=20
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout=org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern= [manage][%p] [%-d{yyyy-MM-dd HH:mm:ss}] %C.%M(%L) | %m%n

#输出到控制台
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
log4j.appender.appender1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] -%m%n

#设置输出样式
log4j.appender.appender2=org.apache.log4j.RollingFileAppender
log4j.appender.appender2.File=${catalina.home}/logs/production2/imagedb.log
log4j.appender.appender2.MaxFileSize=20MB
log4j.appender.appender2.MaxBackupIndex=20
log4j.appender.appender2.layout=org.apache.log4j.PatternLayout
log4j.appender.appender2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] -%m%n


模块中加载log4j时,直接加载该配置文件即可