SpringBoot集成log4j2
1. Log4j2优点
参考官方文档:https://logging.apache.org/log4j/2.x/
相比与其他的日志系统,log4j2丢数据的情况少;在多线程环境下,性能高于logback等10倍以上;利用jdk1.5并发的特性,减少了死锁的发生。
2. Log4j2日志级别
2.1 级别
在log4j2中, 共有8个级别,按照从低到高为:
ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF。
- All:最低等级的,用于打开所有日志记录。
- Trace:是追踪,就是程序推进一下。
- Debug:指出细粒度信息事件对调试应用程序是非常有帮助的。
- Info:消息在粗粒度级别上突出强调应用程序的运行过程。
- Warn:输出警告及warn以下级别的日志。
- Error:输出错误信息日志。
- Fatal:输出每个严重的错误事件将会导致应用程序的退出的日志。
- OFF:最高等级的,用于关闭所有日志记录。
程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少 。
2.2 视图
通过视图可以看到:
-
左边竖栏是Event Level,右边横栏是LoggerConfig Level。
-
YES的意思就是这个event可以通过filter,NO的意思就是不能通过filter。
-
可以看到,INFO级别在Event是无法被ERROR级别的LoggerConfig的filter接受的,所以,INFO信息不回被输出。
3. SpringBoot整合Log4j2配置
<!-- 排除 Spring-boot-starter 默认的日志配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 配置 log4j2 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!-- 加上这个才能辨认到log4j2.yml文件 -->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
</dependency>
4. log4j2.yml配置
- application.yml 引入log4j2.yml
# log4j2 日志配置
logging:
config: classpath:log4j2.yml
- log4j2.yml配置
Configuration:
status: WARN
name: YAMLConfigTest
properties:
property:
name: project.name
value: vhr
thresholdFilter:
level: debug
appenders:
#只接受程序中DEBUG级别的日志进行处理
Console:
name: Console
target: SYSTEM_OUT
ThresholdFilter:
level: DEBUG
onMatch: ACCEPT
onMismatch: DENY
PatternLayout:
Pattern: "[%d{HH:mm:ss.SSS}] %-5level %class{36} %L %M - %msg%xEx%n"
#处理DEBUG级别的日志,并把该日志放到logs/debug.log文件中
RollingFile:
#打印出DEBUG级别日志,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档
- name: RollingFileDebug
fileName: ./logs/${project.name}/debug.log
filePattern: "logs/${project.name}/$${date:yyyy-MM}/debug-%d{yyyy-MM-dd}-%i.log.gz"
PatternLayout:
Pattern: "[%d{yyyy-MM-dd HH:mm:ss}] %-5level %class{36} %L %M - %msg%xEx%n"
Filters:
ThresholdFilter:
- level: DEBUG
- level: INFO
onMatch: DENY
onMismatch: NEUTRAL
Policies:
TimeBasedTriggeringPolicy: # 按天分类
modulate: true
interval: 1
DefaultRolloverStrategy: # 文件最多100个
max: 100
#处理INFO级别的日志,并把该日志放到logs/info.log文件中
- name: RollingFileInfo
fileName: ./logs/${project.name}/info.log
filePattern: "logs/${project.name}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz"
PatternLayout:
Pattern: "[%d{yyyy-MM-dd HH:mm:ss}] %-5level %class{36} %L %M - %msg%xEx%n"
Filters:
#只接受INFO级别的日志,其余的全部拒绝处理
ThresholdFilter:
- level: INFO
- level: WARN
onMatch: DENY
onMismatch: NEUTRAL
Policies:
TimeBasedTriggeringPolicy: # 按天分类
modulate: true
interval: 1
DefaultRolloverStrategy: # 文件最多100个
max: 100
#处理WARN级别的日志,并把该日志放到logs/warn.log文件中
- name: RollingFileWarn
fileName: ./logs/${project.name}/warn.log
filePattern: "logs/${project.name}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log.gz"
PatternLayout:
Pattern: "[%d{yyyy-MM-dd HH:mm:ss}] %-5level %class{36} %L %M - %msg%xEx%n"
Filters:
ThresholdFilter:
- level: WARN
- level: ERROR
onMatch: DENY
onMismatch: NEUTRAL
Policies:
TimeBasedTriggeringPolicy: # 按天分类
modulate: true
interval: 1
DefaultRolloverStrategy: # 文件最多100个
max: 100
#处理error级别的日志,并把该日志放到logs/error.log文件中
- name: RollingFileError
fileName: ./logs/${project.name}/error.log
filePattern: "logs/${project.name}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz"
PatternLayout:
Pattern: "[%d{yyyy-MM-dd HH:mm:ss}] %-5level %class{36} %L %M - %msg%xEx%n"
ThresholdFilter:
level: ERROR
Policies:
TimeBasedTriggeringPolicy: # 按天分类
modulate: true
interval: 1
DefaultRolloverStrategy: # 文件最多100个
max: 100
#druid的日志记录追加器
- name: druidSqlRollingFile
fileName: ./logs/${project.name}/druid-sql.log
filePattern: "logs/${project.name}/$${date:yyyy-MM}/druid-sql-%d{yyyy-MM-dd}-%i.log.gz"
PatternLayout:
Pattern: "[%d{yyyy-MM-dd HH:mm:ss}] %-5level %L %M - %msg%xEx%n"
Policies:
TimeBasedTriggeringPolicy: # 按天分类
modulate: true
interval: 1
DefaultRolloverStrategy: # 文件最多100个
max: 100
loggers:
logger:
#记录druid-sql的记录
name: druid.sql.Statement
level: debug
additivity: false
appender-ref:
ref: druidSqlRollingFile
#log4j2 自带过滤日志
Logger:
- name: org.apache.catalina.startup.DigesterFactory
level: error
- name: org.apache.catalina.util.LifecycleBase
level: error
- name: org.apache.coyote.http11.Http11NioProtocol
level: warn
- name: org.apache.sshd.common.util.SecurityUtils
level: warn
- name: org.apache.tomcat.util.net.NioSelectorPool
level: warn
- name: org.crsh.plugin
level: warn
- name: org.crsh.ssh
level: warn
- name: org.eclipse.jetty.util.component.AbstractLifeCycle
level: error
- name: org.hibernate.validator.internal.util.Version
level: warn
- name: org.springframework.boot.actuate.autoconfigure.CrshAutoConfiguration
level: warn
- name: org.springframework.boot.actuate.endpoint.jmx
level: warn
- name: org.thymeleaf
level: warn
root:
level: INFO
appender-ref:
- ref: Console
- ref: RollingFileInfo
- ref: RollingFileWarn
- ref: RollingFileError
- ref: RollingFileDebug
实操可行,欢迎点赞、收藏、关注。技术交流➕企鹅:995062855(同vx,注明来意)。