Xml格式
<!-- status是log4j2自身内部的信息输出,可以不设置
monitorInterval是自动检测修改配置文件和重新配置本身,设置间隔秒数
-->
<configuration status="WARN" monitorInterval="3600">
<Properties>
<!-- 公共配置 -->
<!-- log文件存放路径./当前工程目录下 -->
<property name="basePath">./log2</property>
<!-- 输入信息格式 -->
<!-- 带行号显示,对日志输出的性能有影响,在控制台上点击可以直接定位到代码 -->
<property name="consoleLogPattern">%d{yyyy-MM-dd HH:mm:} [%-5level] %l - %m%n</property>
<property name="logFilePattern">%d{yyyy-MM-dd HH:mm:} [%-5level] %C.%M[%L line] - %m%n</property>
<!-- 日志默认切割的最小单位 -->
<property name="fileSize">100MB</property>
<!-- 日志默认输出级别 -->
<property name="outputLogLevel">DEBUG</property>
</Properties>
<!--定义appender -->
<appenders>
<!-- =======================================用来定义输出到控制台的配置======================================= -->
<Console name="Console" target="SYSTEM_OUT">
<!-- 设置控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 设置输出格式,不设置默认为:%m%n -->
<PatternLayout pattern="${consoleLogPattern}"/>
</Console>
<!-- ============================打印INFO级别的日志到文件中======================= -->
<!-- fileName:日志保存路径,filePattern:日志压缩路径,将超过指定文件大小的日志,自动存入按"年月"建立的文件夹下面进行压缩 -->
<RollingFile name="InfoFile" fileName="${basePath}/" filePattern="${basePath}/%d{yyyy-MM}/info-%d{yyyy-MM-dd}-%">
<PatternLayout pattern="${logFilePattern}"/>
<Policies>
<!-- interval:设置为1,filePattern是%d{yyyy-MM-dd}到天的格式,则间隔一天生成一个文件,如果设置为12,filePattern是%d{yyyy-MM-dd-HH}到小时的格式,则间隔12小时生成一个文件
modulate:日志默认同类型日志,为true将以0点为边界进行调整
-->
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="${fileSize}"/>
</Policies>
<!-- 日志默认同一文件夹下可以存放的数量,不设置此属性则默认为7个 -->
<DefaultRolloverStrategy max="100" />
<Filters>
<ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</RollingFile>
<!-- ============================打印ERROR级别的日志到文件中=======配置和INFO的一样,就修改下保存文件名称和压缩文件名称==================== -->
<RollingFile name="ErrorFile" fileName="${basePath}/" filePattern="${basePath}/%d{yyyy-MM}/error-%d{yyyy-MM-dd}-%">
<PatternLayout pattern="${logFilePattern}"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="${fileSize}"/>
</Policies>
<DefaultRolloverStrategy max="100" />
<Filters>
<ThresholdFilter level="FATAL" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</RollingFile>
</appenders>
<!--定义logger,只有定义了logger并引入的appender,appender才会生效-->
<loggers>
<!-- 设置包下的日志只打印INFO及以上级别的日志,此设置可以支持sql语句的日志打印 -->
<logger name="" level="INFO" additivity="false">
<appender-ref ref="Console"/>
</logger>
<!--建立一个默认的root的logger-->
<root level="${outputLogLevel}">
<appender-ref ref="Console"/>
<appender-ref ref="InfoFile"/>
<appender-ref ref="ErrorFile"/>
</root>
</loggers>
</configuration>
配置
自动配置
log4j2支持4种格式的配置:json、yaml、xml、peroperties。加载顺序为:
- 系统属性
指定的配置文件(可以是Url)。
- 、
- 、
- 、
- 、
- DefaultConfiguration
Configuration
元素属性
-
monitorInterval
:自动监控更新,单位(秒) -
status
:log4j2的日志等级
Policy 触发策略
TimeBasedTriggeringPolicy
参数名称 | 类型 | 描述 |
---|---|---|
interval | integer | 根据日期格式中最具体的时间单位来决定应该多久发生一次rollover。例如,在日期模式中小时为具体的时间单位,那么每4小时会发生4次rollover,默认值为1 |
modulate | boolean | 表示是否调整时间间隔以使在时间间隔边界发生下一个rollover。例如:假设小时为具体的时间单元,当前时间为上午3点,时间间隔为4,第一次发送rollover是在上午4点,接下来是上午8点,接着是中午,接着是下午4点等发生。 |
TimeBasedTriggeringPolicy
切分文件策略,是基于filePattern中的%d{yyyy-MM-dd-HH-mm-ss}
来决定到底采用哪种时间单位(天、小时、分钟、秒等)。filePattern
日期格式精确到哪一位,interval 也精确到哪一个单位。注意filePattern
中配置的文件重命名规则是 %d{yyyy-MM-dd HH-mm-ss}-%i
,最小的时间粒度是 ss
,即秒钟。 TimeBasedTriggeringPolicy
默认的 size
是 1,结合起来就是每 1 秒钟生成一个新文件。如果改成 %d{yyyy-MM-dd HH}
,最小粒度为小时,则每一个小时生成一个文件
modulate
,说明是否对封存时间进行调制。若 modulate=true
, 则封存时间将以 0 点
为边界进行偏移计算。比如,modulate
=true,interval
=4hours, 那么假设上次封存日志的时间为 03:00,则下次封存日志的时间为 04:00, 之后的封存时间依次为 08:00,12:00,16:00。
切分也是基于最后一部分,增加 interval
。是以程序启动时间。
SizeBasedTriggeringPolicy
size
属性:可以为字节,千字节,兆字节,千兆字节,通过在数值后面指定一个后缀 KB,MB 或者 GB
CronTriggeringPolicy
基于Cron
表达式的触发策略。
<CronTriggeringPolicy schedule="0/5 * * * * ?" />
Strategy 滚动策略
DefaultRolloverStrategy
DefaultRolloverStrategy
制定了默认的rollover
策略,通过max
参数可控制一定时间范围内归档的日志文件的最大个数。
<DefaultRolloverStrategy fileIndex="nomax">
<Delete basePath="${LOG_HOME}" maxDepth="2">
<IfFileName glob="*.">
<IfAny>
<IfAccumulatedFileSize exceeds="100M"/>
<IfAccumulatedFileCount exceeds="100"/>
<IfLastModified age="30d"/>
</IfAny>
</IfFileName>
</Delete>
</DefaultRolloverStrategy>
参数 | Type | Description |
---|---|---|
fileIndex | String | 可选值 max, min,nomax。nomax :将忽略DefaultRolloverStrategy 的最大值和最小值。 |
min | integer | 最小文件数,默认1 |
max | integer | 最大文件数,默认7。一旦达到这个值,旧的存档将在随后的滚动中被删除。 |
compressionLevel | integer | 设置压缩级别,0-9,其中0 =无,1 =最佳速度,到9 =最佳压缩。仅对ZIP文件实现。 |
tempCompressedFilePattern | String | 归档日志文件在压缩过程中的文件名模式。 |
:第四次和随后的归档,被删除,被重命名为,被重命名为,被重命名为。创建新的文件并继续写入。
:第四次和随后的归档,删除,将重命名为,将重命名为,将重命名为foo -。创建新的文件并继续写入。
参数 | Type | Description |
---|---|---|
basePath | String | 从哪开始扫描。 |
maxDepth | int | 最大扫描层次。maxDepth为0时只扫描baseDir本身,maxDepth为1时只扫描baseDir目录下文档 |
pathConditions | PathCondition[] | 可以指定一个或多个PathCondition元素。如果指定了多个PathCondition元素,则需要所有的PathCondition 结果都为true 才会进行删除。PathCondition也可以嵌套。如果进行嵌套,则是先判断外层的PathCondition,然后进行内层的判断。如果没有嵌套,则是按顺序进行判断。 也可以创建自定义条件或使用内置条件: IfFileName 如果文件名与此参数匹配则结果为true ,此参数为正则表达式或 glob的文件。IfLastModified 最后修改时间早于或等于此参数则结果为true,此参数为duration。IfAccumulatedFileCount 文件数超过指定个数则结果为true,此参数为整型。IfAccumulatedFileSize 所有文件总大小达到此参数则结果为true,此参数为KB、MB、GB。IfAll 如果此标签下的所有条件都配置成功(逻辑与),则结果为true。IfAny 如果此标签下的任何一个条件匹配成功(逻辑或),则结果为true。IfNot 如果此标签下的所有条件都不匹配(逻辑非),则结果为true。 |
Filters
Log4j允许在以下4个位置中指定过滤器:
- 与
appenders
、loggers
和properties
元素处于同一级别。这些过滤器可以接受 或者在将事件传递给LoggerConfig之前拒绝事件。 - 在
logger
元素中。这些过滤器可以接受或拒绝特定记录器的事件。 - 在
appender
元素中。这些筛选器可以阻止或导致事件被 appender。 - 在
appender
引用元素中。这些过滤器用于确定记录器是否应路由 将事件添加到appender。
ThresholdFilter
默认值: <ThresholdFilter level="INFO" onMatch="NEUTRAL" onMismatch="DENY"/>
说明:
-
onMatch
:大于、等于level
级别的。 -
onMismatch
:小于level
级别的。 -
ACCEPT
: 表示接受该事件,不再将其传递到过滤器链的下一个元素。 -
DENY
: 表示拒绝该事件,不再将其传递到过滤器链的下一个元素。 -
NEUTRAL
: 表示不做出决定,将事件传递到过滤器链的下一个元素。
<Filters>
<ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
MarkerFilter
<filters>
<MarkerFilter marker="FLOW" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<MarkerFilter marker="EXCEPTION" onMatch="ACCEPT" onMismatch="DENY"/>
</filters>
ThreadContextMapFilter
<ThreadContextMapFilter>
<KeyValuePair key="test" value="123"/>
</ThreadContextMapFilter>
properties格式
#过滤ERROR以上信息
= ThresholdFilter
= FATAL
= DENY
=NEUTRAL
appender.info_only. = LevelRangeFilter
appender.info_only. = INFO
appender.info_only. = INFO
appender.info_only. = ACCEPT
appender.info_only.=DENY
附录
参考
官网
Filters 类型
properties语法
#公告配置,log文件存放路径
= ./log22
#控制台数据
= Console
= console
#输出布局类型
= PatternLayout
#输入信息格式
= %-d{yyyy-MM-dd HH:mm:ss,SSS} [%p] %c %m%n
#级别过滤
= ThresholdFilter
#日志输出的级别
= info
#===================自定义文件输入====================
= RollingFile
= infoLogFile
#输出文件保存地址
=${filename}/
#输入文件滚动时,文件重命名规则
= ${filename}/info-%d{MM-dd-yy-HH-mm-ss}-%
= PatternLayout
#输入信息格式
=[%-5level] %d{yyyy-MM-dd HH:mm:} %c{1} [%t] - %msg%n
= Policies
#输入日志文件大小的触发策略
= SizeBasedTriggeringPolicy
#输入日志文件有100MB触发策略
=100MB
= DefaultRolloverStrategy
= 5
#INFO级别数据写入文件中,
= ThresholdFilter
= INFO
= ACCEPT
=DENY
#第二个配置error的和上面配置info的一样就是名称要修改下
= RollingFile
= errorLogFile
=${filename}/
= ${filename}/error-%d{MM-dd-yy-HH-mm-ss}-%
= PatternLayout
=[%-5level] %d{yyyy-MM-dd HH:mm:} %c{1} [%t] - %msg%n
= Policies
= SizeBasedTriggeringPolicy
=100MB
= DefaultRolloverStrategy
= 5
= ThresholdFilter
= INFO
= ACCEPT
=DENY
#根记录器
= info
= console
= errorLogFile
= error
= infoLogFile
= info