介绍
对输出的日志进行相应的布局,在log4j和logback中Layouts被转化为字符串,log4j2中Layouts返回字节数组。这使得Layouts的结果在更多类型的appender中可用。这意味着需要使用字符集配置大多数布局,以确保字节数组包含正确的值。使用字符集Layouts的根类是org.apache.log .log4j.core.layout。AbstractStringLayout,其中默认为UTF-8。
CSV Layouts
以逗号分隔值(CSV)记录日志,需要Apache Commons CSV 1.4及以上。可以使用CsvParameterLayout 或者CsvLogEventLayout来配置。
示例:
logger.debug("one={}, two={}, three={}", 1, 2, 3);
输出:
0,1441617184044,DEBUG,main,"one=1, two=2, three=3",org.apache.logging.log4j.spi.AbstractLogger,,,,org.apache.logging.log4j.core.layout.CsvLogEventLayoutTest.testLayout(CsvLogEventLayoutTest.java:98),{},[]
GELF Layout
以扩展的日志格式(GELF)显示日志。
示例:
<GelfLayout host="someserver" compressionType="ZLIB" compressionThreshold="1024"/>
输出:
{"version":"1.1","host":"someserver","timestamp":1550739057.906,"level":6,"_thread":"main","_logger":"com.cimu.Log4j2Test","short_message":"log4j2"}
需要引入jackson包,不然会报错。
HTML Layout
以html的形式输出。
示例:
<HtmlLayout charset="UTF-8" />
输出:
JSON Layout
以json格式输出。如果配置了complete="true",那么json将以完整的形式输出,模式这个配置的false。compact是否对json进行压缩。
示例:
<JsonLayout />
输出:
{
"timeMillis" : 1550798980964,
"thread" : "main",
"level" : "INFO",
"loggerName" : "com.cimu.Log4j2Test",
"message" : "log4j2",
"endOfBatch" : true,
"loggerFqcn" : "org.apache.logging.log4j.spi.AbstractLogger"
}
示例:
<JsonLayout complete="true" compact="true"/>
输出:
{"timeMillis":1550799247113,"thread":"main","level":"INFO","loggerName":"com.cimu.Log4j2Test","message":"log4j2","endOfBatch":true,"loggerFqcn":"org.apache.logging.log4j.spi.AbstractLogger"}
Pattern Layout
使用模板来输出日志。
示例:
<PatternLayout pattern="%-5p [%t]: %m%n"/>
输出:
DEBUG [main]: Message 1
Pattern参数:
模板语法 | 描述 |
---|---|
c{precision}或logger{precision} | 输出发布日志事件的日志记录器的名称,可以指定精度说明符来设置显示内容。如果设置了正数,那么从最右边开始输出配置规则的内容;如果设置了负数,那么从最左边开始删除匹配规则的内容。默认情况下,将打印完整内容。如Logger的名字为org.apache.commons.Foo,配置了%c{1},那么显示Foo。 |
C{precision}或class{precision} | 输出日志记录器的类名。可以指定精度说明符来设置显示内容。获取类全路径比较耗性能,谨慎使用。 |
d{pattern}或date{pattern} | 输出日志事件的日期。可以在括号里面设置 SimpleDateFormat 支持的语法。如%d{DEFAULT},输出:2012-11-02 14:34:02,123。也可以设置一组大括号,用来设置java.util.TimeZone.getTimeZone支持的时区,如:%d{HH??ss}{GMT+0},输出:18:34:02 |
enc{pattern}{[HTML|XML|JSON|CRLF]}或者encode{pattern}{[HTML|XML|JSON|CRLF]} | 对特殊的字符进行编码或者转义。如果只设置一个选项,那么默认使用HTML。第二个选项指定使用哪种编码格式。HTML 会把'\r'转为"\r", '\n'转为"\n",会把&, <, >, ", ', /替换为相应的HTML转义符。XML会把&, <, >, ", '替换为XML转义符。JSON会把"转为",\转为\,U+0000 - U+001F转为\u0000 - \u001F。CRLF 会把'\r'转为"\r", '\n'转为 "\n" 。 |
F或file | 输出发出日志记录请求的文件名。比较消耗性能,谨慎使用。 |
highlight{pattern}{style} | 给日志添加ANSI颜色。示例:%highlight{%d [%t] %-5level: %msg%n%throwable}{FATAL=white, ERROR=red, WARN=blue, INFO=black, DEBUG=green, TRACE=blue};%highlight{%d [%t] %-5level: %msg%n%throwable}{STYLE=Logback} |
K{key}或map{key}或MAP{key} | 如果存在key的话, 输出MapMessage中的条目。 |
l或location | 输出生成日志事件的调用者的位置信息。比较消耗性能,谨慎使用。 |
L或line | 输出发出日志记录请求的行号。比较消耗性能,谨慎使用。 |
m{nolookups}{ansi}或msg{nolookups}{ansi}或message{nolookups}{ansi} | 输出日志内容。示例:{%m} |
M或method | 输出发出日志记录请求的方法名。比较消耗性能,谨慎使用。 |
n | 输出平台相关的行分隔符字符。 |
N或nano | 输出纳秒。 |
p|level{level=label, level=label, ...} 或p|level{length=n}或p|level{lowerCase=true|false} | 输出日志事件的级别。示例:%level{WARN=Warning, DEBUG=Debug, ERROR=Error, TRACE=Trace, INFO=Info} |
T或tid或threadId | 输出生成日志事件的线程的ID。 |
t或tn或thread或threadName | 输出生成日志事件的线程的名称。 |
x或NDC | 输出线程上下文堆栈。 |
X{key[,key2...]}或mdc{key[,key2...]}或MDC{key[,key2...]} | 输出线程上下文映射。 |
% | 序列%%输出一个百分号。 |
RFC5424 Layout
以标准的RFC5424进行日志输出。
Serialized Layout
以java序列进行日志输出。
Syslog Layout
以BSD Syslog进行日志输出。
XML Layout
以xml进行日志输出。
示例:
<XmlLayout />
输出:
YAML Layout
以yaml进行日志输出。
示例:
<YamlLayout />
输出:
本文为博主原创文章,未经博主允许不得转载。
更多内容请访问:IT源点
注意:本文归作者所有,未经作者允许,不得转载