转自:http://wesley-hao.blogbus.com/logs/36644149.html
官方站点:http://logging.apache.org/log4j/
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们只需进行简单的配置即可将应用程序的日志信息输送的到控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等。
Log4j中有三个主要的组件,它们分别是 Logger、Appender和Layout,Log4j 允许开发人员定义多个Logger,每个Logger拥有自己的名字,Logger之间通过名字来表明隶属关系。有一个Logger称为Root,它永远存在,且不能通过名字检索或引用,可以通过Logger.getRootLogger()方法获得,其它Logger通过 Logger.getLogger(String name)方法。
Appender则是用来指明将所有的log信息存放到什么地方,Log4j中支持多种appender,如 console、files、GUI components、NT Event Loggers等,一个Logger可以拥有多个Appender,也就是你既可以将Log信息输出到屏幕,同时存储到一个文件中。
Layout的作用是控制Log信息的输出方式,也就是格式化输出的信息。
下面介绍它的简单应用。
一、 填写配置文件
Log4j支持两种配置文件格式xml以及properties,下面以properties文件为例。
#设定根Logger等级为debug,并设定两个Appender,stdout和file
log4j.rootLogger=debug, stdout, file
#设定指定包路径下的logger等级(建议使用这四个等级)
log4g.logger.PackageName=[debug|info|warn|error]
#指定stdout的输出方式
#输出到控制台
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#自由格式输出
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#设定输出格式
log4j.appender.stdout.layout.ConversionPattern=[QC] %p %t] %C.%M(%L) | %m %n
指定file的输出方式
#输出到文件
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
#制定输出的文件名
log4j.appender.file.File=.//build//log//JavaApp.log
#自由格式输出
log4j.appender.file.layout=org.apache.log4j.PatternLayout
#设定输出格式
log4j.appender.file.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m %n
其中需要说明的有:
log4j.appender.AppernderName的值可为:
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生新文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
log4j.appender.AppernderName.layout的值可为:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
log4j.appender.AppernderName.layout.ConversionPattern此项在log4j.appender.AppernderName.layout的值为org.apache.log4j.PatternLayout时可用:
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MM dd HH:mm:ss,SSS},输出类似: 2002年10月18日 22:10:28,921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。如:Testlog4.main(TestLog4.java:10)
二、 在程序中的使用Log4j
1. 首先需要将logging-log4j.jar导入到构建路径中。
2. 然后在类中声明一个私有的静态成员:
private static Logger log = null;
static{
log = Logger.getLogger(Main.class.getName());
//读取配置文档
PropertyConfigurator.configure(".//build//conf//log.properties");
}
这样就可以在类中使用logger对象来记录日志信息了
log.debug("Program is running now.");
log.info("Program is running now.");
log.warn("Program is running now.");
log.error("Program is running now.");