我是用log4j2.yml做的日志文件,所以需要先导入几个包:
首先,先排除springboot自带的日志:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<!-- 排除springboot自带的包,这里注意,如果在spring-boot-starter-web中排除,排不干净-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
之后需要加入log4j2的依赖:
<!-- 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>
最后,送上一份比较全的配置文件:
Configuration:
status: info #用来指定log4j本身的打印日志的级别
monitorInterval: 30 #用于指定log4j自动重新配置的监测间隔时间,单位是s,最小是5s.
Properties: # 定义全局变量
Property:
-
name: log.level
value: info
-
name: log.path
value: D:/pkt/log
-
name: project.name
value: ptk
-
name: log.pattern
#%p:日志的优先级
#%d{}:时间{格式}
# %C(区分大小写):列出调用logger的类的全名
#%l:输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数
#%F:显示调用logger的源文件名
#%r:显示从程序启动时到记录该条日志时已经经过的毫秒数
#%m:显示输出信息
#%n:换行
value: "【%p】,%d{yyyy-MM-dd HH:mm:ss.SSS},%C,%l,%m%n"
Appenders:
Console: # 输出到控制台
name: CONSOLE #指定名字
target: SYSTEM_OUT
PatternLayout:
pattern: ${log.pattern}
RollingFile: # RollingFile节点用来定义超过指定大小自动删除旧的创建新的的Appender
name: ROLLING_FILE
# fileName 指定输出日志的目的文件带全路径的文件名
fileName: ${log.path}/${project.name}.log
# filePattern 指定当发生Rolling时,文件的转移和重命名规则
filePattern: "${log.path}/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
PatternLayout:
pattern: ${log.pattern}
Filters: #一定要先去除不接受的日志级别,然后获取需要接受的日志级别
ThresholdFilter:
#onMatch和onMismatch可以选择的值及其含义。可选的值分别是,ACCEPT(允许), DENY(拒绝), NEUTRAL(中立)
- level: ${log.level}
onMatch: ACCEPT
onMismatch: DENY
Policies: #指定滚动日志的策略,就是什么时候进行新建日志文件输出日志
TimeBasedTriggeringPolicy: # 按天分类
modulate: true #modulate=true用来调整时间:比如现在是早上3am,interval是4,那么第一次滚动是在4am,接着是8am,12am...而不是7am
interval: 1 #单位为h
DefaultRolloverStrategy: # 用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的(通过max属性),默认是7个,最多100个
max: 100
# 只有定义了 Loggers,并引入 Appenders,Appenders才会生效
Loggers:
Root: #用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出
level: error
AppenderRef: #用来指定该日志输出到哪个Appender
- ref: CONSOLE
- ref: ROLLING_FILE
Logger: # 用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等,为com.***包配置特殊的Log级别,方便调试,trace会打印SQL具体结果,debug只打印SQL语句
- name: com.***.mapper #:用来指定该Logger所适用的类或者类所在的包全路径
additivity: false
level: trace
#用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root.如果指定了,
#那么会在指定的这个Appender和Root的Appender中都会输出,此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出
AppenderRef:
- ref: CONSOLE
- ref: ROLLING_FILE