log4j笔记

参考资料
short manual 

complete log4j manual

简介

Log4j的三个主要对象:

Logger:日志记录器,具有hierarchy naming rule(可继承parent或ancestor的日志级别),可分配日志级别TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF, ALL

Appender:日志请求的输出目的地(in log4j’s speak, an output destination is and Appender.),当前包括console, files, GUI componentt, remote socket servers, JMS, NT Event Loggers, and Unix syslog deamons,可自行扩展,可异步执行日志操作。最常用的为DailyRollingFileAppender及RollingFileAppender。其具有可附加特性(Appender Addivity)

Layout:日志输出格式(配合Appender使用),PatternLayout是使用类似C语言的printf函数的转换模式(conversion pattern)。详细配置请参考PatternLayout的API。

配置

       Log4j的配置文件可以是XML格式(使用DOMConfigurator完成配置)或properties格式(使用PropertyConfigurator完成配置)

例子一:Log4j默认读取类路径根目录下log4j.properties完本配置工作

1、在类根目录下添加log4j.properties配置文件

###根日志器
log4j.rootLogger=, A1, A2, A3

###定义名为A1的输出端的类型为控制台
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d [defaultconfig file log] %5p [%t] %c{1}.%M %L - %m%n

###定义名为A2的输出端的类型为指定大小的日志文件
###由于其最多只能
log4j.appender.A2=org.apache.log4j.RollingFileAppender
log4j.appender.A2.Encoding=UTF-8
#已经生成的日志文件最大数目,出于性能考虑不要超过10,默认为1
#log4j.appender.A2.MaxBackupIndex=10
#MaxFileSize default 10MB (10*1024*1024)
log4j.appender.A2.MaxFileSize=1KB
log4j.appender.A2.File=C:/A2.log
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d [default config file log] %5p [%t] %c{1}.%M %L  - %m%n

###定义名为A3的输出端的类型为每天产生一个日志文件
###DailyRollingFileAppender可控制到年月日、时分秒
log4j.appender.A3=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.A3.File=C:/A3.log 
log4j.appender.A3.DatePattern='.'yyyy-MM-dd
log4j.appender.A3.layout=org.apache.log4j.PatternLayout 
log4j.appender.A3.layout.ConversionPattern=%d [default config file log] %5p [%t] %c{1}.%M %L  - %m%n

 2 测试代码如下:

package personal.lql.example;

import org.apache.log4j.Logger;

/**
 * 例子:默认读取classpath根目录配置文件
 * @author 202625
 *
 */
public class UseDefaultLocationConfigFile {
	
	public static final Logger log = Logger
			.getLogger(UseDefaultLocationConfigFile.class);

	public static void main(String[] args) {
		log.debug("using default location log4j.properties test!");
	}

}

例子二:指定目录下配置文件的配置

将log4j.properties配置文件放置在测试类文件同目录

测试代码

package personal.lql.example;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

/**
 * 例子:读取指定目录配置文件
 * 
 * @author 202625
 * 
 */
public class UseSpecifiedConfigFile {
	static final Logger log = Logger.getLogger(UseSpecifiedConfigFile.class);

	public static void main(String[] args) {
		//读取特定URL内容完成配置
		PropertyConfigurator.configure(UseSpecifiedConfigFile.class
				.getClassLoader().getResource("personal/lql/example/log4j.properties"));
		
		log.debug("using specified location log4j.properties test!");
		
		int i = 1;
		int[] arrayI = {0,1};
		
		//先判断能否输出日志再输出 
		if(log.isInfoEnabled()){
			log.info("start " + i + arrayI[1] + "end!!!");
		}
		
	}

}

 配置文件:

###根日志器
log4j.rootLogger=, A1, A2, A3

###定义名为A1的输出端的类型为控制台
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d [specified config file log] %5p [%t] %c{1}.%M %L - %m%n

###定义名为A2的输出端的类型为指定大小的日志文件
###由于其最多只能
log4j.appender.A2=org.apache.log4j.RollingFileAppender
log4j.appender.A2.Encoding=UTF-8
#已经生成的日志文件最大数目,出于性能考虑不要超过10,默认为1
#log4j.appender.A2.MaxBackupIndex=10
#MaxFileSize default 10MB (10*1024*1024)
log4j.appender.A2.MaxFileSize=1KB
log4j.appender.A2.File=C:/A2.log
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d [specified config file log] %5p [%t] %c{1}.%M %L  - %m%n

###定义名为A3的输出端的类型为每天产生一个日志文件
###DailyRollingFileAppender可控制到年月日、时分秒
log4j.appender.A3=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.A3.threshold=INFO
log4j.appender.A3.File=C:/A3.log 
log4j.appender.A3.DatePattern='.'yyyy-MM-dd
log4j.appender.A3.layout=org.apache.log4j.PatternLayout 
log4j.appender.A3.layout.ConversionPattern=%d [specified config file log] %5p [%t] %c{1}.%M %L  - %m%n

日志级别设置:

 1、设置根日志级别

###根日志器
log4j.rootLogger=DEBUG, A1, A2, A3

2、设置对应Appender日志级别

log4j.appender.A3=INFO

注意事项

1、日志转换模式%C是输出完整的日志类名,生成调用日志类信息会比较慢,因此最好不要使用,除非速度不是问题。

2、日志转换模%l是输出日志事件发生位置,包括类目名、发生线程,在代码中的行数,速度很慢,因此最好不要使用。

3、日志记录内容如果开销较大,需先判断是否可输出,例如,下面的输出内容拼装开销比较大,因为不管是否输出日志,拼装都会完成计算,所以最好先前判断能否输出

int i = 1;

       int[] arrayI = {0,1};

      

       //先判断能否输出日志再输出

       if(log.isInfoEnabled()){

           log.info("start " + i + arrayI[1] + "end!!!");

       }

 

相关推荐