Log4j2使用

==作者:YB-Chi==

[toc]

springboot方式

1
2
3
4
5
<!--pom.xml引入-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

配置详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
Configuration:
status: warn
name: YAMLConfig
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

properties: #自定义一些常量,之后使用${变量名}引用
property:
# 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符
# %d{HH:mm:ss.SSS}——日志输出时间
# %thread——输出日志的进程名字,这在Web应用以及异步任务处理中很有用
# %-5level——日志级别,并且使用5个字符靠左对齐
# %logger- ——日志输出者的名字
# %msg——日志消息
# %n——平台的换行符
- name: LOG_FILE_SIZE #名字
value: 500MB #值
- name: FILE_PATH
value: ${sys:logPath}

#appenders:定义输出内容,输出格式,输出方式,日志保存策略等,常用其下三种标签[console,File,RollingFile]。appenders有哪些分类,见下图
appenders:
#console :控制台输出的配置
Console:
name: CONSOLE
target: SYSTEM_OUT
#PatternLayout :输出日志的格式,LOG4J2定义了输出代码,详见第二部分
PatternLayout:
charset: UTF-8
Pattern: '[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n'
#过滤器,后面详细介绍几类过滤器
ThresholdFilter:
level: info #过滤器等级
onMatch: ACCEPT #匹配 ACCEPT:接收,DENY:直接拒绝,NEUTRAL:中立,放过,有后面过滤器处理
onMismatch: DENY #不匹配
SMTP: #邮件发送日志
name: Mail
subject: "ERROR等级日志" #邮件标题
to: 1823795959@qq.com #发给1,发给2,发给3,....
cc: 1823795959@qq.com #抄送给谁,多个就逗号分开
from: 1823795959@qq.com #发送的邮件
smtpHost: smtp.qq.com #发送邮箱服务器
smtpHost: 25 #邮箱端口
smtpProtocol: smtp #协议
smtpUsername: zhanbei #发送名称
smtpPassword: 123456 #发送者的密码,开启SMTP时候的那一串密码
smtpDebug: false #是否开启发送邮箱调试模式
bufferSize: 1024 #缓存区大小
filter: #过滤器,稍后详解
RollingRandomAccessFile: #也有RollingFile,日志滚动策略配置,RollingRandomAccessFile标识有缓存的日志滚动。
-
name: ROLLING_FILE_INFO #策略名称
fileName: ${FILE_PATH}info.log # 日志文件
filePattern: ${FILE_PATH}info-%d{yyyy-MM-dd}_%i.log.gz #指定当发生Rolling时,文件的转移和重命名规则
PatternLayout: #配置日志打印格式化内容
charset: UTF-8 #编码
Pattern: '%highlight{%date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n}{INFO=bright white}'
#格式,具体%logger,%level表示的是啥,有啥,见官方文档
ThresholdFilter: #配置过滤器,过滤器类型见后面
level: info #等级
onMatch: ACCEPT #匹配后,决定
onMismatch: DENY #不匹配后策略
Policies: #Policies :日志滚动策略
TimeBasedTriggeringPolicy: #时间滚动策略
interval: 1 #时间间隔,1s
SizeBasedTriggeringPolicy:
size: ${LOG_FILE_SIZE} #文件大小滚动
DefaultRolloverStrategy: #默认滚动策略,同个文件夹中允许最多日志文件
max: 30 # DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置30个
-
name: ROLLING_FILE_ERROR
fileName: ${FILE_PATH}error.log
filePattern: ${FILE_PATH}error-%d{yyyy-MM-dd}_%i.log.gz
PatternLayout:
charset: UTF-8
Pattern: '%highlight{%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%rEx%n}{INFO=bright white}'
ThresholdFilter:
level: error
onMatch: ACCEPT
onMismatch: DENY
Policies:
TimeBasedTriggeringPolicy:
interval: 1
SizeBasedTriggeringPolicy:
size: ${LOG_FILE_SIZE}
DefaultRolloverStrategy:
max: 30
-
name: ROLLING_P_FILE
fileName: ${FILE_PATH}p.log
filePattern: ${FILE_PATH}pay-%d{yyyy-MM-dd}_%i.log.gz
PatternLayout:
charset: UTF-8
Pattern: '%highlight{%date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n}{INFO=bright white}'
ThresholdFilter:
level: info
onMatch: ACCEPT
onMismatch: DENY
Policies:
TimeBasedTriggeringPolicy:
interval: 1
SizeBasedTriggeringPolicy:
size: ${LOG_FILE_SIZE}
DefaultRolloverStrategy:
max: 30
- #用户登录日志
name: ROLLING_ACCESS_LOG_FILE
fileName: ${FILE_PATH}access.log
filePattern: ${FILE_PATH}access-%d{yyyy-MM-dd}_%i.log.gz
PatternLayout:
charset: UTF-8
Pattern: '%highlight{%date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{10} %class{36} %L %M - %msg%n}{INFO=bright white}'
ThresholdFilter:
level: info
onMatch: ACCEPT
onMismatch: DENY
Policies:
TimeBasedTriggeringPolicy:
interval: 1
SizeBasedTriggeringPolicy:
size: ${LOG_FILE_SIZE}
DefaultRolloverStrategy:
max: 30
- #第三方调用日志
name: ROLLING_THIRDPART_LOG_FILE
fileName: ${FILE_PATH}thirdpart.log
filePattern: ${FILE_PATH}thirdpart-%d{yyyy-MM-dd}_%i.log.gz
PatternLayout:
charset: UTF-8
Pattern: '%highlight{%date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{10} %class{36} %L %M - %msg%n}{INFO=bright white}'
ThresholdFilter:
level: info
onMatch: ACCEPT
onMismatch: DENY
Policies:
TimeBasedTriggeringPolicy:
interval: 1
SizeBasedTriggeringPolicy:
size: ${LOG_FILE_SIZE}
DefaultRolloverStrategy:
max: 30

# <SMTP name="Mail" subject="****SaaS系统正式版异常信息" to="message@message.info" from="message@lengjing.info" smtpUsername="message@message.info" smtpPassword="LENG****1234" smtpHost="mail.lengjing.info" smtpDebug="false" smtpPort="25" bufferSize="10">
# <PatternLayout pattern="[%-5p]:%d{YYYY-MM-dd HH:mm:ss} [%t] %c{1}:%L - %msg%n" />
# </SMTP>
Loggers: #定义logger
AsyncLogger: #定义异步logger,Logger:是同步的。异步会提高代码性能,单独建立一个进程,进行日志打印和管理。这个线程由disruptor管理。disruptor要单独pom引入
- name: org.apache.kafka #名称,可以使报名,类路径,直接可以作用在该类上或者某一包下所有的类。如果自定义名称如:name:wangdacui,在springboot中@slf4h(topic="wangdacui"),就可以用了。
additivity: false
#是否重复,默认true,设置false,这表示在root定义日志记录器,不再重复打印。
#所有自定义的logger都是集成root里面的,所以默认会在root打印后再在自定义的logger中打印,
#additivity:false 标识和root日志记录器断绝关系。
level: ERROR #定义日志记录器记录日志等级
#Logger节点用来单独指定日志的形式,name为包路径,比如要为org.springframework包下所有日志指定为INFO级别等
- name: cn.itsource
additivity: false
- name: AccessLog
level: info
additivity: false
AppenderRef:
ref: ROLLING_ACCESS_LOG_FILE
- name: ThirdPartLog
level: info
additivity: false
AppenderRef:
ref: ROLLING_THIRDPART_LOG_FILE
Root: #设置根节点日志记录器,和自定义日志记录器模式一样
level: info
AppenderRef:
- ref: ROLLING_FILE_INFO
- ref: ROLLING_FILE_ERROR
文章作者: CYBSKY
文章链接: https://cybsky.top/2022/09/07/cyb-mds/java/log/Log4j2/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 CYBSKY