log4j PatternLayout 配置

来源:互联网 发布:做数据库前景如何 编辑:程序博客网 时间:2024/06/05 11:10


原文转自:http://wiki.jikexueyuan.com/project/log4j/log4j-patternlayout.html

如果您希望基于某种模式生成特定格式的日志信息,可使用 org.apache.Log4j.PatternLayout 格式化您的日志信息。

PatternLayout 继承自抽象类 org.apache.Log4j.Layout,覆盖了其 format() 方法,通过提供的模式,来格式化日志信息。

PatternLayout 是一个简单的 Layout 对象,提供了如下属性,该属性可通过配置文件更改:

序号属性 & 描述1conversionPattern

设置转换模式,默认为 %r [%t] %p %c %x - %m%n。

模式转换字符

下面的表格解释了上面模式中用到的字符,以及所有定制模式时能用到的字符:

转换字符含义c使用它为输出的日志事件分类,比如对于分类 "a.b.c",模式 %c{2} 会输出 "b.c" 。C使用它输出发起记录日志请求的类的全名。比如对于类 "org.apache.xyz.SomeClass",模式 %C{1} 会输出 "SomeClass"。d使用它输出记录日志的日期,比如 %d{HH:mm:ss,SSS} 或 %d{dd MMM yyyy HH:mm:ss,SSS}。F在记录日志时,使用它输出文件名。l用它输出生成日志的调用者的地域信息。L使用它输出发起日志请求的行号。m使用它输出和日志事件关联的,由应用提供的信息。M使用它输出发起日志请求的方法名。n输出平台相关的换行符。p输出日志事件的优先级。r使用它输出从构建布局到生成日志事件所花费的时间,以毫秒为单位。t输出生成日志事件的线程名。x输出和生成日志事件线程相关的 NDC (嵌套诊断上下文)。X该字符后跟 MDC 键,比如 X{clientIP} 会输出保存在 MDC 中键 clientIP 对应的值。%百分号, %% 会输出一个 %。

格式修饰符

缺省情况下,信息保持原样输出。但是借助格式修饰符的帮助,就可调整最小列宽、最大列宽以及对齐。

下面的表格涵盖了各种修饰符:

格式修饰符左对齐最小宽度最大宽度注释%20c否20无如果列名少于 20 个字符,左边使用空格补齐。%-20c是20无如果列名少于 20 个字符,右边使用空格补齐。%.30c不适用无30如果列名长于 30 个字符,从开头剪除。%20.30c否2030如果列名少于 20 个字符,左边使用空格补齐,如果列名长于 30 个字符,从开头剪除。%-20.30c是2030如果列名少于 20 个字符,右边使用空格补齐,如果列名长于 30 个字符,从开头剪除。

PatternLayout 示例

下面是为 PatternLayout 编写的一个简单配置:

# Define the root logger with appender filelog = /usr/home/Log4jLog4j.rootLogger = DEBUG, FILE# Define the file appenderLog4j.appender.FILE=org.apache.Log4j.FileAppenderLog4j.appender.FILE.File=${log}/log.out# Define the layout for file appenderLog4j.appender.FILE.layout=org.apache.Log4j.PatternLayoutLog4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd}-%t-%x-%-5p-%-10c:%m%n

下面是生成日志信息的 Java 程序:

import org.apache.Log4j.Logger;import java.io.*;import java.sql.SQLException;import java.util.*;public class Log4jExample{   /* Get actual class name to be printed on */   static Logger log = Logger.getLogger(Log4jExample.class.getName());   public static void main(String[] args)throws IOException,SQLException{      log.debug("Hello this is an debug message");      log.info("Hello this is an info message");   }}

编译并运行上述程序,会在目录 /usr/home/Log4j 下生成一个名为 log.out 的文件,该文件包含如下日志信息:

2010-03-23-main--DEBUG-Log4jExample:Hello this is an debug message2010-03-23-main--INFO -Log4jExample:Hello this is an info message
原创粉丝点击