log4j详细说明

log4j简介和只有Logger类创建日志器

2007年06月08日星期五上午10:33

Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。

1.Log4j配置文件的语法

配置根Logger:log4j.rootLogger=[level],appenderName,appenderName,…

level是日志记录的优先级,logger的level越低,表示该logger越详细;loggingrequest的level越高,表示该loggingrequest越优先输出.appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地.

DEBUGLevel指出细粒度信息事件对调试应用程序是非常有帮助的

INFOlevel表明消息在粗粒度级别上突出强调应用程序的运行过程

WARNlevel表明会出现潜在错误的情形

ERRORlevel指出虽然发生错误事件,但仍然不影响系统的继续运行

FATALlevel指出每个严重的错误事件将会导致应用程序的退出

ALLLevel是最低等级的,用于打开所有日志记录

OFFLevel是最高等级的,用于关闭所有日志记录

Log4j提供的appender有以下几种:

org.apache.log4j.ConsoleAppender(控制台)

org.apache.log4j.FileAppender(文件)

org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)

org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)

org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

Log4j提供的layout有以下几种:

org.apache.log4j.HTMLLayout(以HTML表格形式布局)

org.apache.log4j.PatternLayout(可以灵活地指定布局模式)

org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)

org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

2.代码中使用Log4j

i.获取日志记录器,这个记录器将负责控制日志信息.

语法为:publicstaticLoggergetLogger(Stringname),通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器.

a.用同名参数调用Logger.getLogger(Stringname)将返回同一个logger的引用。故可以在一个地方配置logger,在另外一个地方获得配置好的logger,而无须相互间传递logger的引用。即可在配置文件中配置log4j.logger.ID_LOG=DEBUG,A2而privatestaticLoggerdebug=Logger.getLogger("ID_LOG");将返回同一个logger的引用.

b.logger的创建可以按照任意的顺序,即,父logger可以后于子logger被创建。log4j将自动维护logger的继承树。

ii.配置Log4j环境.

语法为:BasicConfigurator.configure():自动快速地使用缺省Log4j环境。PropertyConfigurator.configure(StringconfigFilename):读取使用Java的特性文件编写的配置文件。DOMConfigurator.configure(Stringfilename):读取XML形式的配置文件。

iii.插入记录信息

语法为:

Logger.debug(Objectmessage);

Logger.info(Objectmessage);

Logger.warn(Objectmessage);

Logger.error(Objectmessage);

3.输出格式

#%c输出日志信息所属的类别的全名

#%d输出日志时间点的日期或时间,指定格式的方式:%d{yyy-MM-ddHH:mm:ss}

#%l输出日志事件的发生位置,即输出日志信息的语句处于它所在的类别的第几行

#%m输出信息,如log(message)中的message。

#%n输出一个列尾符号

#%p输出优先阶层,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,即为DEBUG

#%r输出自应用启动到输出该日志信息所耗费的毫秒数

#%t输出产生该日志事件的线程名

#%f输出日志信息所属的类别的类别名

Log4jDemo.java代码

packagecom.nikee.log4j;

importorg.apache.log4j.Logger;

importorg.apache.log4j.PropertyConfigurator;

publicclassLog4jDemo{

publicstaticvoidmain(Stringargv[]){

//Usethedefaultconfiguration.

PropertyConfigurator.configure("./src/com/nikee/log4j/log4j.properties");

//CreatealoggerbythenameofclassLog4jTest.

Loggerlogger=Logger.getLogger(Log4jDemo.class);

//Theserequestswillbeenabled.

logger.info("Thisisaninfo.");

logger.warn("Thisisawarning.");

logger.error("Thisisanerror.");

logger.fatal("Thisisafatalerror.");

}

}

log4j.properties文件

log4j.rootLogger=INFO,A1,A2

#A1issettobeaConsoleAppender.

log4j.appender.A1=org.apache.log4j.ConsoleAppender

log4j.appender.A1.layout=org.apache.log4j.PatternLayout

log4j.appender.A1.layout.ConversionPattern=[%d{yy/MM/ddHH:mm:ss:SSS}][%C-%M]%m%n

#A2issettobeafile

log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender

log4j.appender.A2.layout=org.apache.log4j.PatternLayout

log4j.appender.A2.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M]%m%n

log4j.appender.A2.File=./src/com/nikee/log4j/Log4jDemo.log

Log4j的编码习惯

1.让每个类都拥有一个privatestatic的Logger对象,用来输出该类中的全部日志信息

2.使用xml文件来完成对log4j环境的配置。在项目的mainclass中的静态初始化块里放log4j环境的配置代码。注意:在一个项目中,log4j环境只需要被配置一次,而不是在每个使用了logger的类里都需要调用一次

3. 用MyClass.class作为参数创建该类的静态Logger对象

此文章为转载

相关推荐