layout

抽象类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 liyixing1@yahoo.com.cn
* @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 liyixing1@yahoo.com.cn
* @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个字符宽度。

可用的转换符是
[table]
|转换符|描述|
|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 the
thread that generated the logging event. The NDC will be discussed
in Chapter 7.|
|X|Outputs the MDC (mapped diagnostic context) associated with the
thread that generated the logging event. The X conversion character
must be followed by a key placed between braces, as in
%X{clientNumber} where clientNumber is the key. The corresponding
value in the MDC will be output. The MDC will be discussed
in Chapter 7.|
|%|写上%%后将直接输出一个%符号|
[/table]

关于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文件的标题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值