官方文档本节地址:http://logging.apache.org/log4j/2.x/manual/layouts.html
Layouts是什么
官方文档:“An Appender uses a Layout to format a LogEvent into a form that meets the needs of whatever will be consuming the log event.” Layout是Appender用来格式化日志事件并组织有用信息的工具。
在log4j1.X中,Layouts会将日志信息转化为字符串。但是在log4j2中,为了满足更多种类Appender的需要,改为返回字节数组。因此,我们需要额外注意Layouts的编码问题,以确保字节数组保存的是正确的内容。所有Layouts的根类是org.apache.logging.log4j.core.layout.AbstractStringLayout,它的默认编码是UTF-8。该类的子类可以提供自己的默认编码。
Layouts的分类
名称 | 描述 |
---|---|
CSV Layouts | 格式化日志参数为CSV(字符分隔值) |
GELF Layout | 格式化日志为Graylog Extended Log Format (GELF) 1.1 |
HTML Layout | 生成一个HTML页面,并将日志事件添加进一个table的行中 |
JSON Layout | 格式化日志事件为JSON格式 |
Pattern Layout | 通过转换模式配置的灵活的Layout |
RFC5424 Layout | 按照RFC 5424规范格式化日志 |
Serialized Layout | 使用Java序列化将日志事件简单地序列化为字节数组 |
Syslog Layout | 格式化为BSD Syslog 记录 |
XML Layout | 按照log4j.dtd的定义,将记录格式化为XML |
YAML Layout | 将以一些YAML事件格式化为序列化字节字符串 |
常用Layout详解
Pattern Layout
Pattern Layout是一个可以通过转换模式灵活配置的Layout。所谓的转换模式与C语言的printf格式很相近,它是由文本和一种称为转换说明符的格式控制表达式组成的。
注意特殊字符转义的问题,特殊字符包括“\t, \n, \r, \f”等。如果要在输出中插入一个反斜线,则需要使用“//”。
每一个转换说明符都由“%”开始,后面可跟格式修饰符和转换字符。转换字符是用来说明数据类型的。格式修饰符控制如宽度、填充、左右对齐等等。例如使用 “%-5p [%t]: %m%n”作为模式字符串,那么下面的代码块:
Logger logger = LogManager.getLogger("MyLogger");
logger.debug("Message 1");
logger.warn("Message 2");
会产生如下日志输出:
DEBUG [main]: Message 1
WARN [main]: Message 2
上面例子中的“%-5p”表示日志的优先级信息应该左对齐为5个字符宽度。
PatternLayout的参数列表
参数名 | 类型 | 描述 |
---|---|---|
charset | String | 字节数组的编码方式。若不设置,则使用平台默认的编码 |
pattern | String | 下面表中一个或多个转换模式的复合模式字符串 |
patternSelector | PatternSelector | 一个分析日志信息和确定使用哪个模式的组件,和pattern参数是互斥的< |