Log4j由三个重要的组件构成:
日志信息的优先级
志信息的输出目的地
志信息的输出格式
日志信息的优先级从高到低有 ERROR、WARN、 INFO、DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显 示内容。
以下是 log4j.properties 文件的一个 appender X 的
指定Debug级别的输出,并声明使用名为 X、Y、Z 三个Appender。
log4j.rootLogger = DEBUG, X, Y, Z
log4j.appender.X 的各项设置
log4j.appender.Y 的各项设置
log4j.appender.Z 的各项设置
-
配置根 Logger
log4j.rootLogger = [ level ] , , , …
在配置文件的第一行即指明了日志输出的优先级级别。常见的优先级级别有:
优先级级别 说明
- ERROR 输出ERROR(及以上级别)的日志信息
- INFO 输出INFO(及以上级别)的日志信息
- WARN 输出INFO(及以上级别)的日志信息
- DEBUG 输出INFO(及以上级别)的日志信息 ALL 输出所有级别的日志信息
- Appender 的输出目的地
常见的输出目的地有两个:
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
设置日志信息的输出目的地 Appender 语法为:
log4j.appender.<appenderName> = org.apache.log4j.ConsoleAppender
log4j.appender.<appenderName>.option1 = value1
... ...
log4j.appender.<appenderName>.optionsN = valueN
如果Appender输出目的地是文件,那么至少还需要为 Appender 多配置一个File属性。
log4j.appender..File = 一个文件的路径名
- Appender 的输出布局和输出格式
常见的输出布局有:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
设置日志信息的格式的 Appender 语法为:
log4j.appender.<Appender>.layout = org.apache.log4j.PatternLayout
log4j.appender.<Appender>.layout.option1 = value1
...
log4j.appender.<Appender>.layout.optionN = valueN
常见的输出格式中最常见也最灵活的是:org.apache.log4j.PatternLayout,使用它需要需要配置其 ConversionPattern 属性,以进一步控制其日志格式。
log4j.appender.<Appender>.layout.ConversionPattern = ...
Log4J 采用类似 C 语言中的 printf 函数的打印格式格式化日志信息,打印参数如下: %m 输出代码中指定的消息
- %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
- %r 输出自应用启动到输出该log信息耗费的毫秒数
- %c 输出所属的类目,通常就是所在类的全名 %t 输出产生该日志事件的线程名
- %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
- %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式
- %p 输出优先级,即 DEBUG,INFO,WARN,ERROR,921
- %tl 输出产生该日志事件的线程名 %m 输出代码中指定的消息。
- %n 输出一个回车换行符 %c 输出所在类的全名
例如:
[%t] %-5p %c - %m%n
%d{yyyy-MM-dd}-%t-%-5p-%-10c:%m%n
最简单情况下,输出格式可以使用 org.apache.log4j.SimpleLayout 如此就无需设置打印格式。
在代码中使用Log4j
1.得到记录器
使用 Log4j,第一步就是获取日志记录器(即Logger对象),这个记录器将负责控制日志信息。
Logger类提供了静态方法以获得Logger对象。其语法为:
public static Logger getLogger()
getLogger() 方法有多种重载形式。
默认情况下,Log4j回去classpath(即src目录)下查找名为log4j.properties的文件,并读取解析其中配置内容。
此后,你就可以轻松地使用不同优先级别的日志记录打印输出信息。其输出目的地和输出格式取决于你的配置文件配置。
Logger.debug ( Object message ) ;
Logger.info ( Object message ) ;
Logger.warn ( Object message ) ;
Logger.error ( Object message ) ;
log4j 输出 printStackTrace() 的堆栈信息
Exception 对象的 printStackTrace() 总是将打印信息输出到屏幕上。在使用 log4j 时,有时会期望将异常堆栈信息输出到Appender(再由Appender决定输出到哪)。
logger.info(e.getMessage(), e);