一、官网地址:https://logging.apache.org/log4j/2.x/manual/configuration.html#Loggers
二、添加依赖(一定要去掉logback)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- 排除掉logging,不使用logback,改用log4j2 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
<exclusion><!-- 去掉默认的logback日志配置 -->
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- log4j-slf适配器-->
<!-- log4j-slf4j-impl已经依赖了slf4j-api和log4j-core-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
</dependency>
<!-- 加上这个才能辨认到log4j2.yml文件 -->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
</dependency>
并在application.yml中添加配置项,注明log4j2配置文件存放地址
logging:
config: classpath:config/log4j2.yml
三、log4j2配置文件编写
Configuration:
# eigth levels:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
# status:这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出
status: WARN
# 每隔多少秒扫描配置文件、应用配置文件的最新修改
monitorInterval: 5
# 变量
Properties:
Property:
- name: PATTERN1
# [%-5p] 输出等级,长度不足5时右侧补齐空格
value: "%d{yyyy-MM-dd HH:mm:ss} %style{[%-5p]}{cyan} %highlight{%c{1.}} : %m%n "
- name: PATTERN2
value: UTF-8
- name: LOG_PATH
value: logs
- name: LOG_NAME
value: log4j
# 输出目标(比如控制台,文件)
Appenders:
Console:
name: Console
target: SYSTEM_OUT
PatternLayout:
pattern: ${PATTERN1}
charset: ${PATTERN2}
# 是否禁止使用彩色,默认是true
disableAnsi: false
# 过滤,NEUTRAL代表中立,传递个下一个过滤器
# Filters:
# ThresholdFilter:
# level: ERROR
# onMatch: DENY
# onMismatch: ACCEPT
# LevelRangeFilter:
# minLevel: ERROR
# maxLevel: DEBUG
# onMatch: DENY
# onMismatch: ACCEPT
File:
name: File
fileName: ${LOG_PATH}/${LOG_NAME}_rolling.log
PatternLayout:
pattern: ${PATTERN1}
charset: ${PATTERN2}
disableAnsi: false
RollingFile:
name: RollingFile
# %i 同一分钟文件达到规定大小,积累出新文件
filePattern: "${LOG_PATH}/%d{yyyy-MM-dd-HH-mm}_%i.log.gz"
fileName: ${LOG_PATH}/${LOG_NAME}.log
PatternLayout:
pattern: ${PATTERN1}
charset: ${PATTERN2}
disableAnsi: false
Policies:
# 基于时间的滚动策略,时间单位取决于filePattern的最小时间单位
TimeBasedTriggeringPolicy:
interval: 2
# 基于文件大小的滚动策略
SizeBasedTriggeringPolicy:
size: 1MB
# 设置%i的最大值,默认值是7,文件数量达到最大值就会删除旧的日志
DefaultRolloverStrategy:
max: 10
# 异步输出
Async:
name: Async
AppenderRef:
ref: Console
Loggers:
Root:
level: WARN
AppenderRef:
- ref: Console
- ref: File
- ref: RollingFile
# Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等
# additivity="false"为不继承父log的Appender
# Logger
# - name: xwl
# level: WARN
# additivity: false
# AppenderRef: Console
pattern配置解释:https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout
四、在代码中使用
使用@Slf4j注解,使用以下代码调用
log.error("ERROR_错误");
log.warn("WARN_警告");