`

log4j2<PatternLayout>子节点浅析

    博客分类:
  • JAVA
 
阅读更多

log4j2<PatternLayout>子节点浅析

 

首先声明本文并不教您怎么用log4j2,仅仅只对<PatternLayout>子节点进行说明。

要看懂本文需要对log4j2有一定的了解,至少能够知道<Appenders>、<Layouts>和<Loggers>的区别。

本文主要参考对象为log4j2官方手册:《Apache Log4j 2 v. 2.1 User's Guide》,但是鉴于官方手册的不少细节描述得并不是非常清楚,甚至还有错误,所以还希望大家自己多试验,毕竟如果官方文档有错误或写得不清楚,我也没办法。

---------------------------------------------这是一条分割线,以下是正文---------------------------------------------------

PatternLayout是最重要也是最常用的控制输出内容的节点,包括类名、时间、行号、日志级别、序号等都可以控制,同时还可以指定日志格式,可以使用正则表达式处理输出结果。

PatternLayout中包含的特殊字符包括\t,\n,\r,\f,用\\输出单斜线,用%%输出%。

下面是PatternLayout的参数

 

Parameter Name

Type

Description

charset

String

输出的字符集。如果没有指定,则使用系统默认的字符集输出。

pattern

String

 详见后面的pattern的表格

replace

RegexReplacement

替换部分输出中的String。这将会调用一个与RegexReplacement转换器相同的函数,不同的是这是针对整个消息的。

alwaysWriteExceptions

boolean

默认为true。总是输出异常,即使没有定义异常对应的pattern,也会被附在所有pattern的最后。设为false则不会输出异常。

header

String

可选项。包含在每个日志文件的顶部。

footer

String

可选项。包含在每个日志文件的尾部。

noConsoleNoAnsi

boolean

默认为false。如果为true,且System.console()是null,则不会输出ANSI转义码。

 

 

下面RegexReplacement参数

 

Parameter Name

Type

Description

regex

String

Java正则表达式

replacement

String

任何匹配正则规则,被正则替换的后值

 

 

下面是pattern属性具体描述(这个表格仅包括了我能看懂的部分,还有很多看不懂并且试验也不成功的部分我都没写。另外用于控制输出结果颜色的highlight和style我也没有写,实在是感觉平时意义不大):

 

参数名

参数意义

详细描述

%c{参数}或%logger{参数}

输出logger的名称,即语句private static final Logger logger = LogManager.getLogger(App.class.getName())中App.class.getName()的值。也可以使用其他字符串。

如果不带参数,则输出完整的logger名称;如果参数是整数n(只支持正整数),则先将logger名称依照小数点(.)分割成n段,然后取右侧的n段;如果参数不是整数,则除了最右侧的一段,其他整段字符都用这个字符代替,保留小数点;不管怎么写,最右侧的一段都保持不变。默认不带参数,并输出logger的完整名称。注意:上面的说明写得很烂,但是官方文档写得就这么烂,而且还不完整,看不懂是必然的,还请看官自己多试验,才能有所领会。如果看官自己懒得试验又看不懂,只能建议不要加参数,直接%c输出完整值。

示例:

pattern表达式

logger名称

结果

%c{1}

org.apache.com.te.Foo

Foo

%c{2}

org.apache.com.te.Foo

te.Foo

%c{1.}

org.apache.com.te.Foo

o.a.c.t.Foo

%c{1.1.!}

org.apache.com.te.Foo

o.a.!.!.Foo

%c{.}

org.apache.com.te.Foo

….Foo

%C{参数}或%class{参数}

输出类名。注意,这个是大写C,上面是小写c

参数规则与%c完全一样,请参见上面的说明。

%d{参数}{时区te{参数}{时区

输出时间。

第一个大括号数可以是保留关键字,也可以是text.SimpleDateFormat字符拼接而成。保留关键字有:DEFAULT,ABSOLUTE, COMPACT, DATE, ISO8601, ISO8601_BASIC。

第二个大括号中的参数是java.util.TimeZone.getTimeZone的值,可以设定时区。

示例:

pattern表达式

输出

%d{DEFAULT}

2012-11-02 14:34:02,781

%d{ISO8601}

2012-11-02T14:34:02,781

%d{ISO8601_BASIC}

20121102T143402,781

%d{ABSOLUTE}

14:34:02,781

%d{DATE}

02 Nov 2012

14:34:02,781

%d{COMPACT}

20121102143402781

%d{HH:mm:ss,SSS}

14:34:02,781

%d{dd MMM yyyy HH:mm:ss,SSS}

02 Nov 2012

14:34:02,781

%d{HH:mm:ss}{GMT+0}

18:34:02

%d{UNIX}

1351866842

%d{UNIX_MILLIS}

1351866842781

输出特殊字符

&, <, >, ”, ’全都要使用实体名称或实体编号替代,即

符号

实体名称

实体编号

&

&amp;

&#38;

&lt;

&#60;

&gt;

&#62;

&quot;

&#34;

&apos;

&#39;

官方文档说pattern删除了\r和\n,但是经我测试可以使用,明显是官方文档的错误。

%F|%file

输出文件名

仅仅是文件名称,如Test.java,不包含路径名称

highlight{pattern}{style}

高亮显示结果

 

%l

输出完整的错误位置,如com.future.ourfuture.test.test.App.tt(App.java:13)

注意1:这个是小写的L。

注意2:使用该参数会影影响日志输出的性能。

%L

输出错误行号,如“13”

注意:使用该参数会影响日志输出的性能。

%m或%msg或%message

输出错误信息,即logger.error(String msg)中的msg

 

%M或%method

输出方法名,如“main”,“getMsg”等字符串

 

%n

换行符

根据系统自行决定,如Windows是”\r\n”,Linux是”\n”

%level{参数1}{参数2}{参数3}

参数1用来替换日志信息的级别,格式为:{level=label, level=label, …},即使用label代替的字符串替换level。其中level为日志的级别,如WARN/DEBUG/ERROR/TRACE/INFO

参数2表示只保留前n个字符。格式为length=n,n为整型。但参数1中指定了label的字符串不受此参数限制

参数3表示结果是大写还是小写。参数1指定了label的字符串不受此参数限制。

示例:

输入

输出

%level{WARN=W, DEBUG=D, ERROR=E, TRACE=T, INFO=I}

logger.warn输出W, logger.debug输出D,其他依次类推

%level{ERROR=FSF, length=2, lowerCase=true}

logger.error会输出FSF,其他均只输出前两个字母,且小写,如wa/de/in/tr

%level{length=3}

所有都只输出前3个字符,如WAR/DEB /ERR/TRA/INF

%r或%relative

输出自JVM启动以来到log事件开始时的毫秒数

 

replace{pattern}{regex}{substitution}

将pattern的输出结果,按照正则表达式regex匹配后,使用substitution字符串替换

例如:"%replace{%logger }{\.}{/}就是将所有%logger中的小数点(.)全部替换为斜杠,如果%logger是com.future.ourfuture.test.test.App则输出为com/future/ourfuture/test/test/App。pattern中可以写多个表达式,如%replace{%logger%msg%C}{\.}{/}%n

%sn或%sequenceNumber

自增序号,每执行一次log事件,序号+1,是一个static变量。

 

%t或%thread

创建logging事件的线程名

 

%u{RANDOM|TIME}或%uuid{RANDOM|TIME}

依照一个随机数或当前机器的MAC和时间戳来随机生成一个UUID

 

 

下面是pattern的对齐修饰:

 

对齐修饰,可以指定信息的输出格式,如是否左对齐,是否留空格等。

编写格式为在任何pattern和%之间加入一个小数,可以是正数,也可以是负数。如%10.20c表示对logger的信息进行处理。%-10.20m表示对message进行处理。

整数表示右对齐,负数表示左对齐;整数位表示输出信息的最小10个字符,如果输出信息不够10个字符,将用空格补齐;小数位表示输出信息的最大字符数,如果超过20个字符,则只保留最后20个字符的信息(注意:保留的是后20个字符,而不是前20个字符)。

下面是一些示例。

 

格式

是否左对齐

最小宽度

最大宽度

说明

%20

右对齐

20

右对齐,不足20个字符则在信息前面用空格补足,超过20个字符则保留原信息

%-20

左对齐

20

左对齐,不足20个字符则在信息后面用空格补足,超过20个字符则保留原信息

%.30

不对齐

30

如果信息超过30个字符,则只保留最后30个字符

%20.30

右对齐

20

30

右对齐,不足20个字符则在信息前面用空格补足,超过30个字符则只保留最后30个字符

%-20.30

左对齐

20

30

左对齐,不足20个字符则在信息后面用空格补足,超过30个字符则只保留最后30个字符

 

 

分享到:
评论

相关推荐

    Spring Boot使用Log4j2的实例代码

    &lt;artifactId&gt;spring-boot-starter-log4j2&lt;/artifactId&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.logging.log4j&lt;/groupId&gt; &lt;artifactId&gt;log4j-flume-ng&lt;/artifactId&gt; &lt;version&gt;2.6&lt;/version&gt; &lt;/...

    LOG4J2 mdc配置

    LOG4J2的生产环境配置配置案例: 4.日志滚动,避免单个日志过大,可以按小时进行日志分割. &lt;RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app-%d{MM-dd-yyyy}.log.gz" ignoreExceptions=...

    tomcat9 slf4j+log4j2 写日志.zip

    &lt;artifactId&gt;log4j-slf4j-impl&lt;/artifactId&gt; &lt;version&gt;2.x.x&lt;/version&gt; &lt;/dependency&gt; &lt;/dependencies&gt; ``` 2. **配置Log4j2**:Tomcat 9允许你在`$CATALINA_BASE/conf`目录下创建`log4j2.xml`文件来定制日志...

    Log4j2学习log4j2.xml配置模板

    &lt;artifactId&gt;spring-boot-starter-log4j2&lt;/artifactId&gt; &lt;/dependency&gt; ``` Log4j2.xml 配置模板 下面是一个较为完整的 Log4j2.xml 配置模板: ```xml &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;!--日志级别以及...

    Slf4j+log4j2.docx

    &lt;param-value&gt;WEB-INF/config/log4j2.xml&lt;/param-value&gt; &lt;/context-param&gt; ``` 确保`log4j2.xml`文件的位置与`param-value`中的路径匹配。 通过这种方式,SLF4J会通过Log4j2桥接器调用Log4j2进行日志记录。在...

    SpringBoot框架配置log4j和log4j2的配置代码

    &lt;artifactId&gt;spring-boot-starter-log4j2&lt;/artifactId&gt; &lt;/dependency&gt; ``` 2. **配置文件**:创建`log4j2.xml`或`log4j2.json`文件,定义日志级别和输出目的地。例如: ```xml &lt;!-- log4j2.xml 示例 --&gt; ...

    Log4j2 web demo (log4j2 version 2.1)

    **Log4j2 Web Demo(基于Log4j2 Version 2.1)** Log4j2是Apache软件基金会开发的一款广泛使用的日志记录框架,它提供了丰富的日志处理功能,适用于Java应用程序,包括Web应用程序。在Log4j2版本2.1中,引入了更多...

    log4j2在项目中的配置,对不同级别的日志进行不同文件的存储

    &lt;groupId&gt;org.apache.logging.log4j&lt;/groupId&gt; &lt;artifactId&gt;log4j-api&lt;/artifactId&gt; &lt;version&gt;2.x.x&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.logging.log4j&lt;/groupId&gt; &lt;artifactId&gt;log4j-...

    log4j+slf4j实现 log4j测试代码,log4j+slf4j实现 log4j测试代码

    &lt;groupId&gt;org.apache.logging.log4j&lt;/groupId&gt; &lt;artifactId&gt;log4j-api&lt;/artifactId&gt; &lt;version&gt;2.x.x&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.logging.log4j&lt;/groupId&gt; &lt;artifactId&gt;log4j-...

    Common-log 和log4j2 配合使用

    &lt;groupId&gt;org.apache.logging.log4j&lt;/groupId&gt; &lt;artifactId&gt;log4j-api&lt;/artifactId&gt; &lt;version&gt;2.x.x&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.logging.log4j&lt;/groupId&gt; &lt;artifactId&gt;log4j-...

    Log4j2异步写日志源码

    &lt;groupId&gt;org.apache.logging.log4j&lt;/groupId&gt; &lt;artifactId&gt;log4j-api&lt;/artifactId&gt; &lt;version&gt;2.x.x&lt;/version&gt; &lt;!-- 使用最新版本 --&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.logging.log4j&lt;/...

    log4j2在SpringMVC工程中的运用

    &lt;groupId&gt;org.apache.logging.log4j&lt;/groupId&gt; &lt;artifactId&gt;log4j-api&lt;/artifactId&gt; &lt;version&gt;2.x.x&lt;/version&gt; &lt;!-- 请替换为最新版本 --&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.logging.log4j&lt;/...

    java应用使用log4j将日志发送到Kafka

    &lt;groupId&gt;org.apache.logging.log4j&lt;/groupId&gt; &lt;artifactId&gt;log4j-api&lt;/artifactId&gt; &lt;version&gt;2.13.3&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.logging.log4j&lt;/groupId&gt; &lt;artifactId&gt;log4j...

    log4j配置发送邮件案例

    &lt;groupId&gt;org.apache.logging.log4j&lt;/groupId&gt; &lt;artifactId&gt;log4j-api&lt;/artifactId&gt; &lt;version&gt;2.x.x&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.logging.log4j&lt;/groupId&gt; &lt;artifactId&gt;log4j-...

    slf4j+log4j2配置使用

    &lt;artifactId&gt;spring-boot-starter-log4j2&lt;/artifactId&gt; &lt;/dependency&gt; ``` 2. 添加Log4j2的配置文件log4j2-spring.xml到资源文件夹中,如下所示: ```xml &lt;configuration status="OFF"&gt; &lt;appenders&gt; ...

    JavaEE slf4j转log4j的小示例

    &lt;artifactId&gt;log4j-slf4j-impl&lt;/artifactId&gt; &lt;version&gt;2.x.x&lt;/version&gt; &lt;/dependency&gt; &lt;/dependencies&gt; ``` - **配置Log4j**:在项目资源目录下创建`log4j.properties`或`log4j2.xml`文件,定义日志输出的配置...

    Java中Log4J

    &lt;groupId&gt;org.apache.logging.log4j&lt;/groupId&gt; &lt;artifactId&gt;log4j-api&lt;/artifactId&gt; &lt;version&gt;2.x.x&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.logging.log4j&lt;/groupId&gt; &lt;artifactId&gt;log4j-...

    SpringBoot2.X整合Mybatis代码示例2-使用配置文件方式+Log4j

    &lt;artifactId&gt;spring-boot-starter-log4j2&lt;/artifactId&gt; &lt;/dependency&gt; &lt;/dependencies&gt; ``` 请注意替换`2.x.x`为实际的Mybatis Spring Boot Starter版本号。 2. **配置Mybatis**:在`application.properties`或`...

    spring-boot-starter-log4j2

    &lt;artifactId&gt;spring-boot-starter-log4j2&lt;/artifactId&gt; &lt;/dependency&gt; ``` 2. 配置Log4j2:Spring Boot默认使用`src/main/resources/log4j2.xml`或`log4j2.json`作为Log4j2的配置文件。你可以根据需求自定义日志...

    log4j2 2.15日志例子

    在SpringBoot应用中使用Log4j2,需要在`pom.xml`中添加Log4j2的依赖,并在`application.properties`或`log4j2.xml`/`log4j2.json`文件中进行相应配置。 **Log4j2的配置** 1. **Maven依赖**:在`pom.xml`中添加Log4...

Global site tag (gtag.js) - Google Analytics