抽象类Layout
public abstract class Layout implements OptionHandler {
// Derived classes need to implement their own formatting strategy.
abstract public String format(LoggingEvent event);
public String getContentType() { return "text/plain"; }
public String getHeader() { return null; }
public String getFooter() { return null; }
abstract public boolean ignoresThrowable();
}
PatternLayout
它和C语言的printf方法非常类似。格式转换由普通字符和转换字符组合而成。转换字符由%开始,紧跟着的是可选的格式修饰符和转换字符标示。使用%前缀的表示符号将被转换到实际的内容。如name, level, date, thread name.
例子
/**
*
* @author liyixing
[email protected]
* @version 1.0
* @since 2011-7-10 下午11:16:54
*/
package com.cgodo.log4j.test;
import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
/**
*
* @author liyixing
[email protected]
* @version 1.0
* @since 2011-7-10 下午11:16:54
*/
public class LayoutTest {
/**
* 描述:
*
* @param args
* @author liyixing 2011-7-10
*/
public static void main(String[] args) {
Logger rootLogger = Logger.getRootLogger();
PatternLayout layout = new PatternLayout("%-5p [%t]: %m%n");
ConsoleAppender appender = new ConsoleAppender(layout);
rootLogger.addAppender(appender);
rootLogger.setLevel(Level.DEBUG);
rootLogger.debug("Message 1");
rootLogger.warn("Message 2");
}
}
在上面的格式%-5p [%t]: %m%n中,并没有明确的分隔转换字符和普通文本的字符存在。PatternLayout能自己区分普通文本和转换字符。其中%-5p是日志的调用级别。事件是左对齐的,5个字符宽度。
可用的转换符是
转换符 |
描述 |
c |
调用日志事件的所在记录器的名字,如一个logger的名字是my.test.bbb.ccc,调用的是WARN级别的日志输出,那么输出的是输出my.test.bbb.ccc,可以在其右边指定了精度,如%c{2}那么输出的是bbb.ccc |
C |
调用日志事件的所在的类名,如我在com.cgodo.log4j.test.LayoutTest类中调用,输出的是com.cgodo.log4j.test.LayoutTest,和c转换符一样,可以在右边指定宽度,如%C{2}输出%C{2} |
d |
日志调用所发生的时间,日期格式在其后跟着的大括号内的格式指定如%d{yyyy-MM-dd HH:mm:ss},我现在输出的结果是2011-07-11 21:05:22,推荐使用的是log4j本身提供的日期格式,如%d{ISO8601},%d{ABSOLUTE},%d{DATE} |
F |
所处所在文件名,如上面说C转换符的例子,输出结果是LayoutTest.java |
l |
是的日志事件发生的位置信息,这个和虚拟机的实现有点关系,一般境况下能得到类,方法,行数源文件等信息,如我在com.cgodo.log4j.test.LayoutTest中的输出结果就是com.cgodo.log4j.test.LayoutTest.main(LayoutTest.java:38),为了输出这个信息,会比较影响性能。 |
L |
只是输出触发日志事件代码所在的行号,性能损耗会小很多。 |
m |
显示应用给日志提供的其他信息,如消息。rootLogger.warn("Message 2");那么%m将得到的是Message 2 |
M |
输出调用者所在的方法名 |
n |
换行,和\r \r\n有相同功能,能识别系统的换行符,自动转换成\r或者\r\n,log4j推荐使用这个转换符,而不是\r或者\r\n |
p |
输出调用的日志的级别,如我是调用logger.debug方法,那么级别就是debug |
r |
输出自应用启动后第一次调用logger的日志输出方法,到输出该log信息耗费的毫秒数 |
t |
输出所在线程的名字 |
x |
暂时不知道,Outputs the NDC (nested diagnostic context) associated with thethread that generated the logging event. The NDC will be discussedin Chapter 7. |
X |
Outputs the MDC (mapped diagnostic context) associated with thethread that generated the logging event. The X conversion charactermust be followed by a key placed between braces, as in%X{clientNumber} where clientNumber is the key. The correspondingvalue in the MDC will be output. The MDC will be discussedin Chapter 7. |
% |
写上%%后将直接输出一个%符号 |
关于C, F, l, L, and M几个的使用,会影响到性能,没必要过于使用。
格式修饰符
放在%和转换符之间。
第一个可选的格式修饰符是左对齐(-)。
第二个可选的格式修饰符是字段最小宽度。一个整数。表示输出的最小字符数。如果数据未达到指定最小大小,那么它将以左填充(默认)或者右填充方式(左对齐情况下只能使用右填充了)。用空格填充,直到达到最小宽度。如果大于指定最小宽度,不会被截断
当然可以指定最大字符数,使用.符号加数字表示最大字符数。如果大于指定长度,多余的字符会被删除。它是从前面删除,而不是从后面删除的。如最大字符是8个,数据有10个字符,那么前面两个字符会被删除。
%20c 右对齐,最少20字符,没有左边用空格填充
%-20c 左对齐,最少20字符,没有右边用空格填充
%.30c 右对齐,最多30字符,超过左边的截取掉
%20.30c 右对齐,最少20字符,最多30字符,填充或截取规则略
%-20.30c 左对齐,最少20字符,最多30字符,填充或截取规则略
XMLLayout
以XML方式进行布局,详情看log4j manual
HTMLLayout
以HTML方式进行布局.
以固定格式表格输出事件。表格包含事件,事件,等级,logger和消息。
属性
LocationInfo boolean true则输出日志发生的位置信息,如果打开会多出一列File:Line。默认false。
Title String html文件的标题。