log4j2配置文件
log4j2配置文件使用
日志输出级别,共有8个级别,按照从低到高为:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.
以下是配置文件的解释
-
Appenders日志输出方向集合Appenders子标签
-
Console输出到屏幕Console 属性
name:自定义ConsoleAdapter名,此值用于AppenderRef的ref属性引用
target:SYSTEM_OUT或SYSTEM_ERR,一般只设置默认:SYSTEM_OUT
Console 子标签
-
PatternLayout输出格式pattern:自定义日志输出格式 -
ThresholdFilter阈值过滤器(控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch))ThresholdFilter 属性
level:控制台仅输出自选的日志级别的日志信息
onMatch:ACCEPT/DENY
onMismatch:ACCEPT/DENY
-
-
File日志输出至文件File 属性
name:自定义FileAdapter名,此值用于AppenderRef的ref属性引用
fileName:日志输出文件名,如:"logs/app.log"
File 子标签
PatternLayout日志输出格式pattern:自定义日志输出格式
-
RollingFile日志滚动输出至文件RollingFile 属性
name:自定义RollingFileAdapter名,此值用于AppenderRef的ref属性引用
fileName:日志文件全路径
filePattern:当日志文件滚动【即因为文件大小、时间等条件触发的新日志文件创建)时,归档日志文件的命名规则和位置】此格式将标识日志滚动按天,小时,分钟滚动,比如
# 日志按小时滚动 logs/app-%d{yyyy-MM-dd-HH}.log.gz # 日志按天滚动 logs/app-%d{yyyy-MM-dd}.log.gzbufferedIO:日志在写入时是否使用缓冲;使用缓冲I/O可以提高日志写入的性能,尤其是在写入大量小消息时。然而,这也意味着在应用程序崩溃或关闭时,可能会有一些日志消息仍然留在缓冲区中未写入磁盘,这可能会导致数据丢失。
RollingFile 子标签
-
PatternLayout日志输出格式pattern:自定义日志输出格式 -
Policies策略子标签
-
SizeBasedTriggeringPolicy基于大小触发的策略(根据文件大小自动切割日志)SizeBasedTriggeringPolicy属性
size:文件大小,日志超过size规定后自动切割
-
TimeBasedTriggeringPolicy基于时间触发的策略(根据时间自动切割日志)TimeBasedTriggeringPolicy属性
interval:滚动文件的频率。它可以是任意正整数,通常表示的是天数(它也可以被解释为小时、分钟等,但通常用于表示天)
modulate:设置为true时,滚动将在每天的指定时间进行,而不是从日志事件的最后一次写入时间开始计算。这有助于确保滚动发生在每天的固定时间
-
-
DefaultRolloverStrategy默认滚动策略(默认保留最近多少份日志)DefaultRolloverStrategy属性
max:自定义保留的最近的日志数量
DefaultRolloverStrategy 子标签
-
delete定期删除日志文件的策略delete属性
basePath:日志文件所在的基础路径
maxDepth:搜索子目录层级
delete 子标签
-
IfFileName文件名匹配IfFileName属性
glob:正则表达式
-
IfLastModified最后一次更新日期匹配IfLastModified 属性
age:距今时长
-
-
-
-
Async异步日志;提高日志记录的性能,特别是在高并发和高日志生成率的场景下Async属性
bufferSize:日志事件的内部缓冲区大小
blocking:因日志事件的生产速度超过消费速度,导致日志队列满时,blocking性决定了AsyncAppender的行为,当blocking设置为true时,如果日志队列已满AsyncAppender将阻塞生产线程,直到有空间可用或达到超时时间。这可以确保所有志事件都被处理,但可能会降低应用程序的性能。
当blocking设置为false时,如果日志队列已满,AsyncAppender将丢弃新的日志件或采用其他策略来处理这些事件(这取决于errorRef和discardThreshold等置)。这可以避免生产线程被阻塞,但可能会导致一些日志数据丢失。Async子标签
-
AppenderRefAppenderRef属性
ref:引用<Appenders>标签下的子标签的name值
-
-
-
Loggers-
loggerLogger节点用来单独指定日志的形式,比如为指定包下的class指定不同的日志级别等logger 属性
name:包名/全类名
level:日志输出级别
additivity:是否加入到日志中,false:排除,true:加入
logger 子标签
-
AppenderRef输出方向AppenderRef属性
ref:引用<Appenders>标签下的子标签的name值
-
-
Root根日志Root属性
level:日志输出级别
Root子标签
-
AppenderRef输出方向AppenderRef属性
ref:引用<Appenders>标签下的子标签的name值
-
-
RollingFile(RollingFileAppender) 和 File(FileAppender) 的区别
FileAppender:将日志事件写入到一个指定的文件中。当文件达到一定大小或达到某个时间点时,FileAppender不会自动创建新的文件或删除旧的文件。因此,如果日志文件持续增长,可能会导致磁盘空间不足的问题。
RollingFileAppender:当日志文件达到指定的大小、时间或其他条件时,RollingFileAppender会创建新的日志文件并继续写入。同时,它还可以配置删除旧的日志文件,以保持磁盘空间的合理使用。(生产环境使用RollingFileAppender)
log4j2 日志输出格式定义
- 日期 %d{yyyy-MM-dd HH:mm:ss} 括号里的日期定义根据需求来,比如只用精确到天:%d
- 线程名 %t
- 记录器类名 %c 或 %c{n} n指代从这个类往前数n层输出,举个例子,类
com.pz.connect.socket.consumer.GetMes,定义%c{3}仅在日志输出socket.consumer.GetMes,而不会输出全类名什么是记录器?比如这个TDemo类,日志中打印warn say,TDemo就是记录器
public class TDemo { private Logger logger = LoggerFactory.getLogger(TDemo.class); public void say(){ logger.warn("warn say"); } } - 日志级别:%p 或 %level(建议参考格式对齐使用 %5leven 或 %5p)
- 日志信息:%m 或 % msg
- 换行:%n
- 输出所在方法名:%M
- 输出所在行号:%L
格式对齐
以上的输出格式%m,%msg,%p等都可以用类比C语言printf的输出格式对齐方式输出:"%m.ns":输出m位,取字符串(左起)n位,左补空格
概念
Appenders 日志的输出形式
- ConsoleAppender 控制台输出
- FileAppender 文件形式输出
- RollingFileAppender 滚动文件形式输出
- AsyncAppender 异步输出
Loggers:控制日志输出,控制哪些appender可以被输出,哪些不被输出
PatternLayout:日志输出格式
本文来自博客园,作者:勤匠,转载请注明原文链接:https://www.cnblogs.com/JarryShu/articles/18224851

浙公网安备 33010602011771号