在应用程序开发领域,特别是企业级应用程序,需要在程序不停止的情况下,能够分析程序的运行过程。这个时候就需要把程序运行过程中的数据内容,分支选择,异常,错误等信息完整的记录下来。实现这个功能的部件就叫做日志(log)。
常见的记录日志的方法有,
Java Logging API 需 JDK1.4 版本以上才能支持。java.util.logging.* 包是 JDK 的日志记录 API 。
Log4j。Log4j 比 JDK Logging 更加成熟。 Log4j 事实上是 日志记录标准。
Commons log。通用 Log 处理,它是一个接口抽象,底层的实现可以自动替换:如果当前存在 log4j, 则使用 log4j 来实现 ( 自动按 log4j 配置要求 , 配置输出路径 )否则,使用 JDK LOG 来实现。否则,使用其自身的简单实现
今天介绍的是使用logging+commons-logging+log4j输出日志。有点将上面提到的处理日志方法大杂烩的感觉。但用起来还是很方便的。
首先,需要引入logging、commons-logging、log4这三个工具包
然后,建立一个简单的java项目:logtest测试类,以及log4j.properties日志配置文件。
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class logTest { public static void main(String[] args) { Log logger = LogFactory.getLog(logTest.class); logger.debug("DUBUG调试信息"); } }下面是比较重要的log4j.properties日志配置文件
###direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE}%5p %c{1}:%L - %m%n
#direct messages to file
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=d:/oa.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE}%5p %c{1}:%L - %m%n
#set log levels
log4j.rootLogger=warn,stdout, file
#对com.test目录及其子目录有效,如果不指明,则遵循log4j.rootLogger
log4j.logger.com.test =debug,stdout,file
1、Logger
Logger按照布局中指定的格式把日志信息写入一个或多个输出源,Log4j 允许开发人员定义多个Logger,每个Logger拥有自己的名字,Logger之间通过名字来表明隶属关系。
2、Level
它还有一个重要的属性——日志级别。不管何种日志记录工具,大概包含如下几种日志级别,优先级由低到高:DEBUG,INFO,WARN,ERROR,FATAL。
在程序中打印日志信息时,优先级别低于配置文件中指定的级别时,将不做任何处理;比如配置文件中指定优先级别是WARN,当程序中有代码logger.info(message),则对message不会进行处理(输出到控制台或者文件)
在log4j中,使用
log4j.rootLogger=[级别],[使用哪个appender]
log4.logger.[logger的名称]=[级别],[使用哪个appender]
来对logger进行配置。如果某个logger没有进行配置,那么就会使用rootLogger的配置信息。
3、Appender
一个Appender表示一个输出的目的地。Appendr可以是控制台、文本文件、XML文件或Socket。一个Logger可以拥有多个Appender ,即可以将种信息输出到多个位置。
在log4j中,使用
log4j.appender.[appender的名称]=[appender类名]
log4j.appender.[appender的名称].[appender的属性名]=[appender的属性值]
来对appender进行配置
4、Layout
Layout组件负责格式化输出的日志信息,一个Appender只能有一个Layout。
在log4j中,使用
log4j.appender.[appender的名称].layout=[layout的类名]
log4j.appender.[appender的名称].layout.[layout的属性名]=[layout的属性名]
来对layout进行配置
而log4j采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:
%m输出代码中指定的消息
%p输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r输出自应用启动到输出该log信息耗费的毫秒数
%c输出所属的类目,通常就是所在类的全名
%t输出产生该日志事件的线程名
%n输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
%d输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyyMM dd HH:mm:ss}
%l输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数