log4j 详解

log4j 详解


1.Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局)
Loggers(记录器),日志写出器 ,供程序员输出日志信息 ,收集日志信息源数据
Appenders(输出源),就是输出到的地方(文件、控制台)
Layouts(布局),日志信息的布局(输出形式),定义输出格式


工作原理:
1.应用程序调用Loggers输入日志源信息。
2.Loggers查看日志源信息等级,过滤不符合等级的。
3.将日志源信息格式化为Layouts(布局)定义的格式的信息
4.按输出目的地进行格式化后信息的输出。


配置根 Logger ,其语法为:(收集那些级别的信息和定输出的地方有那些)
log4j.rootLogger = [ level ] , appenderName, appenderName, …
1.level 是日志记录的优先级,分为 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 ALL 或者您定义的级别。 Log4j 建议只使用四个级别 ,优先级从高到低分别是 ERROR 、 WARN 、 INFO 、 DEBUG 。
2.通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定 义了 INFO 级别,则应用程序中所有 DEBUG 级别的日志信息将不被打印出来 。
3.appenderName 就是指日志信息输出到哪个地方。您可以同时指定多个输出目的地。
如:log4j.rootLogger=info, ServerDailyRollingFile, stdout



配置日志信息输出目的地 Appender ,其语法为:(输出目的地的参数配置)
log4j.appender.appenderName = fully.qualified.name.of.appender.class. 其中, Log4j 提供的 appender 有以下几种:
1.org.apache.log4j.ConsoleAppender (控制台),
2.org.apache.log4j.FileAppender (文件),
3.org.apache.log4j.DailyRollingFileAppender (每天产生一个日志文件),
4.org.apache.log4j.RollingFileAppender (文件大小到达指定尺寸的时候产生一个    新的文件)
5.org.apache.log4j.WriterAppender (将日志信息以流格式发送到任意指定的地方)
6.选择了其中一种后,还要就每一种选项进行相关参数的配置
如:log4j.appender.ServerDailyRollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ServerDailyRollingFile.File=C://logs/notify-subscription.log //就选项file进行相关参数的配置(因为输出目的地为file)



配置日志信息的格式(布局),其语法为:(定义输出源的信息格式化)
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
1.org.apache.log4j.HTMLLayout (以 HTML 表格形式布局),
2.org.apache.log4j.PatternLayout (可以灵活地指定布局模式),
3.org.apache.log4j.SimpleLayout (包含日志信息的级别和信息字符串),
4.org.apache.log4j.TTCCLayout (包含日志产生的时间、线程、类别等等信息)
5.选择了其中一种后,还要就每一种选项进行相关参数的配置
如:log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%p] [%c %M %L %F] %m%n



配置多个Logger
1.除了根Logger,不可以定义多个Logger
如:log4j.logger.test = info, stdout //定义一个test logger



log4j的logger继承性
1.子logger会叠加式地继承父logger的所有appender
比如:
log4j.logger.com.test = info, stdout
log4j.logger.com.test.a = info, stdout
结果会导致test.a下的所有日志会在stdout输出两次。



例子:
log4j.properties
log4j.rootLogger=info, ServerDailyRollingFile, stdout
log4j.appender.ServerDailyRollingFile=org.apache.log4j.DailyRollingFileAppender

log4j.appender.ServerDailyRollingFile.DatePattern='.'yyyy-MM-dd
log4j.appender.ServerDailyRollingFile.File=C://logs/notify-subscription.log

log4j.appender.ServerDailyRollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.ServerDailyRollingFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%p] [%c %M %L] %m%n

log4j.appender.ServerDailyRollingFile.Append=true

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%p] [ %M %L %F] %m%n

#定个一个logger
log4j.logger.xing=INFO,xing

log4j.appender.xing=org.apache.log4j.ConsoleAppender
log4j.appender.xing.layout=org.apache.log4j.PatternLayout
log4j.appender.xing.layout.ConversionPattern=xing %%d{yyyy-MM-dd HH:mm:ss} %p [%c] %m%n

#定个一个xing logger的子logger,以点进行表示继承关系,子logger会叠加式地继承父logger的所有appender
log4j.logger.xing.a=INFO,yong

log4j.appender.yong=org.apache.log4j.ConsoleAppender
log4j.appender.yong.layout=org.apache.log4j.PatternLayout
log4j.appender.yong.layout.ConversionPattern=yong %%d{yyyy-MM-dd HH:mm:ss} %p [%c] %m%n



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

public class LogTest {
	public static void main(String[] args) {
		//PropertyConfigurator.configure("D:\\Test\\log4j.properties");
		
		
		PropertyConfigurator.configure("log4j.properties"); //读入参数配置文件,没有配置文件时会有一个默认的配置文件
		//Logger logger = LoggerFactory.getLogger("xing");	//得到xing这个Logger
		Logger logger = LoggerFactory.getLogger("xing.a");	//得到xing.a这个Logger
		//Logger logger = LoggerFactory.getLogger(xing.a.class);
	
		logger.info("log message");
		
		//也可以用
		//org.apache.log4j.Logger logger = LogManager.getLogger("xing.a");	//得到xing.a这个Logger
		//logger.info("log message");
	}
}



参考原文: http://blog.csdn.net/anlina_1984/article/details/5313023
参考原文: http://blog.sina.com.cn/s/blog_5ed94d710101go3u.html
参考原文(配置多个Logger): http://www.cnblogs.com/shenliang123/archive/2012/05/02/2479286.html
参考原文(log4j的logger继承性): http://blog.csdn.net/java_belucky/article/details/22267795

猜你喜欢

转载自huangyongxing310.iteye.com/blog/2331578
今日推荐