log4j2 pattern 行号_Log4j2详解

# Log4j2详解

# 介绍

Apache Log4j 2是对Log4j的升级,它比其前身Log4j 1提供了显著的改进。并提供了许多在Logback中可用的改进,同时修复了Logback体系结构中的一些固有问题。

# 日志等级

共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF All:最低等级的,用于打开所有日志记录.

Trace:追踪,指定细粒度比DEBUG更低的信息事件。

Debug:指出细粒度信息事件对调试应用程序是非常有帮助的.

Info:消息在粗粒度级别上突出强调应用程序的运行过程.

Warn:输出警告及warn以下级别的日志.

Error:输出错误信息日志.

Fatal:输出每个严重的错误事件将会导致应用程序的退出的日志.

OFF:最高等级的,用于关闭所有日志记录.

# 配置全解

# 默认配置文件(XML)

# 配置属性详解(xml)

# Configuration

Configuration有两个属性:status 和 monitorinterval status: 用来指定log4j本身的打印日志的级别.

monitorinterval: 用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s。

# Appenders

Appender负责将LogEvents传递到目的地。每个Appender都必须实现Appender接口,常用的有三种子节点:Console、RollingFile、File。

# Loggers

Loggers节点,常见的有两种:Root和Logger.

# Console

Console节点用来定义输出到控制台的Appender. name:指定Appender的名字.

target:SYSTEM_OUT 或 SYSTEM_ERR,一般只设置默认:SYSTEM_OUT.

PatternLayout:输出格式,不设置默认为:%m%n.

说明

常用的格式 %p:输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL

%d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921

%r:输出自应用启动到输出该log信息耗费的毫秒数

%c:输出日志信息所属的类目,通常就是所在类的全名

%t:输出产生该日志事件的线程名

%l:输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数

%x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中

%%:输出一个"%"字符

%F:输出日志消息产生时所在的文件名称

%L:输出代码中的行号

%m:输出代码中指定的消息,产生的日志具体信息

%n:输出一个回车换行符,Windows平台为"/r/n",Unix平台为"/n"输出日志信息换行

可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。 %20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。

%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。

%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。

%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉。

# File

FileAppender用于将日志写入到一个文件中,该文件由fileName参数指定。有几个重要的参数: name:指定Appender的名字

fileName:指定输出日志的目的文件带全路径的文件名。

append:默认为true,记录追加到文件的最后,否则就先清除以前的记录再写入

bufferedIO:默认true,记录将会写入到缓存区,当缓存区满的时候,就会写入磁盘。或者如果设置immediateFlush将会立即写入。文件锁定不能和bufferedIO一起使用

bufferSize:当bufferedIO设置为true时,默认是8192 bytes

locking:是否对文件上锁,当有多个线程可能同时写该文件时需要考虑上锁,但对文件上锁会影响系统的性能,所以需要谨慎使用。默认值是false

PatternLayout:输出格式,不设置默认为:%m%n

完整参数见官网

# RollingFile

RollingFileAppender是一个非常有意思的输出器。它将日志信息写入一个文件后,会判断是否满足封存文件的要求,若满足,则除非封存文件的动作。RollingFileAppender需要TriggeringPolicy来指定触发封存的条件,另外还需要RolloverStrategy来告诉输出器如何封存文件。 name:指定Appender的名字

fileName:指定输出日志的目的文件带全路径的文件名。

append:默认为true,记录追加到文件的最后,否则就先清除以前的记录再写入

bufferedIO:默认true,记录将会写入到缓存区,当缓存区满的时候,就会写入磁盘。或者如果设置immediateFlush将会立即写入。文件锁定不能和bufferedIO一起使用

bufferSize:当bufferedIO设置为true时,默认是8192 bytes

locking:是否对文件上锁,当有多个线程可能同时写该文件时需要考虑上锁,但对文件上锁会影响系统的性能,所以需要谨慎使用。默认值是false

PatternLayout:输出格式,不设置默认为:%m%n

filePattern:新建文件名称格式和路径

说明 filePattern文件名若以.gz结尾,文件会被压缩

filePattern文件名若以.log结尾,文件不会被压缩 Policies:是组合滚动日志策略的标签,指定滚动日志的策略,就是什么时候进行新建日志文件输出日志

Filters: 是组合过滤器的标签,它包含的子标签是具体的过滤器

filePattern="logs/info-%d{yyyy-MM-dd HH-mm}-%i.log.gz">

# Policies 滚动日志的策略 TimeBasedTriggeringPolicy

说明

基于时间的滚动策略 此参数需要与filePattern结合使用,规定了触发rollover的频率,默认值为1。

假设interval为4,若filePattern的最小时间粒度为小时(如yyyy-MM-dd HH),则每4小时触发一次rollover。

假设interval为2,若filePattern的最小时间粒度为小时(如yyyy-MM-dd HH:mm ),则每2分钟触发一次rollover。

指明是否对interval进行调节,默认为false。若modulate为true,会以0为开始对interval进行偏移计算。例如,最小时间粒度为小时,当前为3:00,interval为4,则以后触发rollover的时间依次为4:00,8:00,12:00,16:00,...。

SizeBasedTriggeringPolicy

说明

基于指定文件大小的滚动策略 这一触发策略基于对log文件大小的判断。当log文件大于设定的阈值时,将触发封存动作。可设定的log文件大小的单位有bytes、KB、MB或GB。

OnStartupTriggeringPolicy

说明 它会自行判断log文件的创建时间和JVM的启动时间。若log文件的创建时间早于JVM的启动时间,则将原来的log文件封存,然后创建一个新的空白log文件。

minSize:文件必须滚动的最小大小。无论文件大小如何,0大小都会导致滚动。默认值是1,这将防止滚动一个空文件。

CompositeTriggeringPolicy

说明

复合型触发策略 对应标签Policies

即将多个触发条件组合到一起,这些触发条件是或的关系,只要其中一个条件满足,则触发封存动作。

# RolloverStrategy DefaultRolloverStrategy

说明

文件命名模式下保留文件的个数 fileIndex:有两个选择“max”或“min”。设置为“max”意味着将最新的日志信息封存在序号较大的封存文件中。“min”则相反。默认为max

min: 封存文件的序号的起始值,默认值为1

max: 封存文件的序号的最大值

compressionLevel:压缩等级,0-9,只对zip有效

假设fileIndex设置为min,min属性设置为1,max属性设置为3,文件名是“foo”。,文件名模式为“foo-%i.log”,最新的日志在index小的文件中。 rollover=0时,所有日志都输入到foo.log中

rollover=1时,foo.log会重命名为foo-1.log,并创建新的foo.log的文件写入

rollover=2时,foo-1.log会重命名为foo-2.log,foo.log会重命名为foo-1.log,并创建新的foo.log的文件写入

rollover=3时,foo-2.log会重命名为foo-3.log,foo-1.log会重命名为foo-2.log,foo.log会重命名为foo-1.log,并创建新的foo.log的文件写入

rollover=4时,foo-3.log文件会被删除,foo-2.log会重命名为foo-3.log,foo-1.log会重命名为foo-2.log,foo.log会重命名为foo-1.log,并创建新的foo.log的文件写入

假设fileIndex设置为max,min属性设置为1,max属性设置为3,文件名是“foo”。,文件名模式为“foo-%i.log”,最新的日志在index大的文件中。 rollover=0时,所有日志都输入到foo.log中

rollover=1时,foo.log会重命名为foo-1.log,并创建新的foo.log的文件写入

rollover=2时,foo.log会重命名为foo-2.log,并创建新的foo.log的文件写入

rollover=3时,foo.log会重命名为foo-3.log,并创建新的foo.log的文件写入

rollover=4时,foo-1.log文件会被删除,foo-2.log会重命名为foo-1.log,foo-3.log会重命名为foo-2.log,foo.log会重命名为foo-3.log,并创建新的foo.log的文件写入

Delete on Rollover

说明 2.5+引入删除操作,该操作使用户能够控制在翻转时删除哪些文件,而不是使用DefaultRolloverStrategy max属性。

Delete操作允许用户配置一个或多个条件,这些条件选择要相对于基本目录删除的文件。

basePath:扫描日志文件根路径,必须配置

maxDepth:日志文件可见的层级,默认为1,最大值为Integer.MAX_VALUE,若为1,只扫描根目录下的文件,若为MAX_VALUE扫描所有层级的文件。

IfFileName:删除的条件之一,文件名称匹配

IfLastModified:删除的条件之一,文件最后修改时间匹配

IfAny:要保留的文件

IfAccumulatedFileSize:按文件大小保留最近文件,exceeds="100 GB",保留最近100GB的文件

IfAccumulatedFileCount:按文件数量,exceeds="10",保留最近的10个文件

更多Rollover见官网

# filters

说明

日志过滤器 onMatch和onMismatch可选的值分别是,ACCEPT(接受), DENY(拒绝), NEUTRAL(中立)

Accept意味着其他的Filter都不应该再被调用,而事件应该被处理。

Deny意味着事件应该被立即忽略,且将控制讲给调用处。

Neutral代表事件应该被传递给其他的Filter。如果没有其他Filter,则事件将被处理。 ThresholdFilter

说明

日志等级过滤器 level:日志等级,比如debug,info等

RegexFilter

说明

正则过滤器 regex:正则表达式

TimeFilter

说明

时间段过滤器 start:开始时间

end:截止时间

更多Filters见官网

# loggers Root节点来指定项目的根日志,如果没有单独指定Logger,那么默认使用Root日志输出

说明 定义的appender必须要在loggers里面声明才能生效

level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.

AppenderRef:Root的子节点,用来指定该日志输出到哪个Appender.

Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。

说明

时间段过滤器 level:日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.

name:用来指定该Logger所适用的类或者类所在的包全路径,继承自Root节点.

AppenderRef:Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root.如果指定了,那么会在指定的这个Appender和Root的Appender中都会输出,此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出。

logger async 用的是无锁并发技术,必须引入Disruptor

includeLocation:位置信息,比如哪个类默认为true

# 完整配置

logs

filePattern="${baseDir}/logs_1/$${date:yyyy-MM}/info-%d{yyyy-MM-dd HH-mm}-%i.log.gz">

filePattern="${baseDir}/logs_2/$${date:yyyy-MM}/info-%d{yyyy-MM-dd HH-mm}-%i.log.gz">

filePattern="${baseDir}/pay/$${date:yyyy-MM}/info-%d{yyyy-MM-dd HH-mm}-%i.log.gz">

filePattern="${baseDir}/biz/$${date:yyyy-MM}/info-%d{yyyy-MM-dd HH-mm}-%i.log.gz">

你可能感兴趣的:(log4j2,pattern,行号)