springboot项⽬配置logback⽇志系统
记录springboot项⽬配置logback⽇志⽂件管理:
logback依赖jar包
SpringBoot项⽬配置logback理论上需要添加logback-classic依赖jar包:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
但是因为SpringBoot项⽬默认就是使⽤的就是logback⽇志系统,创建SpringBoot项⽬时引⼊的spring-boot-starter或者spring-boot-starter-web依赖jar包中已经包含了spring-boot-starter-logging的依赖,⾥⾯同时包含多种⽇志系统依赖,如下图所⽰:
包括logback和log4j,所以,⽆需额外添加依赖,直接配置l就可以了。
此外,如果需要切换为log4j2,那么需要在spring-boot-starter-web依赖中排除springboot⾃带的commons‐logging,然后在引⼊log4j2的依赖jar包,如下所⽰:
<!--排除 commons‐logging-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>commons‐logging</groupId>
<artifactId>commons‐logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--引⼊log4j2 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
logback的默认配置
前⾯说到SpringBoot项⽬默认使⽤logback,那么对于logback的配置情况,SpringBoot⼜是如何定义的呢?
⾸先,SpringBoot会从resource包下查l或l,如果这两个都不存在,则会调⽤BasicConfigurator,创建⼀个最⼩化的基本配置。
最⼩化配置由⼀个关联到根logger的ConsoleAppender组成,默认输出模式为%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n,root logger级别为DEBUG,所以并不会⽣成⽇志⽂件,只会输出到控制台。
创建l配置⽂件
通过⾃定义l配置⽂件来控制⽇志输出情况,通常我们会配置三个⽇志组件:
1. 控制台输出
2. 输出info级别⽇志⽂件
3. 输出error级别⽇志⽂件
以下为l完整配置
<!-- Logback configuration. See logback.qos.ch/manual/index.html -->
<configuration scan="true" scanPeriod="2 seconds">
<!--定义⽇志⽂件的存储地址-->
<property name="LOG_PATH" value="./logs" />
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.ConsoleAppender">
<encoder class="ch.qos.der.PatternLayoutEncoder">
<!--格式化输出:%d表⽰⽇期,%-5level:级别从左显⽰5个字符宽度,%t表⽰线程名,%msg:⽇志消息,%n是换⾏符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- info级别⽇志⽂件输出 -->
<appender name="INFO_FILE" class="ch.olling.RollingFileAppender">
<!-- ⽇志⽂件输出的⽂件名 -->
<File>${LOG_PATH}/info.log</File>
<rollingPolicy class="ch.olling.SizeAndTimeBasedRollingPolicy">
<!-- 每⽇⽣成⽇志⽂件或⽇志⽂件⼤⼩超出限制后输出的⽂件名模板 -->
<fileNamePattern>${LOG_PATH}/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- ⽇志⽂件保留天数 -->
<maxHistory>30</maxHistory>
<!-- ⽇志⽂件最⼤⼤⼩:100MB -->
<maxFileSize>100MB</maxFileSize>
</rollingPolicy>
<encoder class="ch.qos.der.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- error级别⽇志⽂件输出 -->
<appender name="ERROR_FILE" class="ch.olling.RollingFileAppender">
<!-- ⽇志输出级别,优先级 > '<root level>' -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<File>${LOG_PATH}/error.log</File>
<rollingPolicy class="ch.olling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>30</maxHistory>
<maxFileSize>100MB</maxFileSize>
</rollingPolicy>
<encoder class="ch.qos.der.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 默认⽇志输出级别 -->
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="ERROR_FILE" />
</root>
</configuration>
logback配置说明
根节点configuration
<configuration scan="true" scanPeriod="2 seconds" debug="false">
</configuration>
configuration包含以下三个属性:
scan:配置⽂件发⽣更改时,进⾏重载,默认值为true
scanPeriod:监测配置⽂件是否有修改的时间间隔,默认值为6000,默认单位为毫秒
debug:打印logback内部⽇志信息,实时查看logback运⾏状态,默认值为false
⼦节点property:
<property name="LOG_PATH" value="./logs" />
⽤来定义变量值,包含以下两个属性
name:变量名称
value:变量定义的值
通过property定义的值会被插⼊到logger上下⽂中,可以使${}来使⽤变量,这⾥定义了log的保存位置根⽬录。
⼦节点appender:
<appender name="STDOUT" class="ch.ConsoleAppender">
</appender>
是负责写⽇志的组件,通过⾃定义⽇志组件控制⽇志输出的情况,包含以下两个属性:
name:组件名称
class:组件class指定的类名
不同的class,对应不同的功能:
如ch.ConsoleAppender会把⽇志输出到控制台
ch.olling.RollingFileAppender把⽇志内容输出到指定⽂件
File节点:⽇志⽂件输出的⽂件名
<File>${LOG_PATH}/info.log</File>
filter节点:过滤器,⽤来指定⽇志组件的⽇志输出级别,优先级⾼于root节点的level。
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
rollingPolicy节点:
滚动⽇志⽂件配置,涉及⽇志⽂件的移动和重命名,只有⼀个class属性,⽤来指定滚动策略,这⾥使⽤的是ch.olling.SizeAndTimeBasedRollingPolicy
包含以下三个属性:
fileNamePattern:发⽣滚动时的⽇志命名⽅式
log4j2不打印日志maxHistory:⽇志⽂件的最⼤保留时间,超过设定时间后会⾃动删除
maxFileSize:每份⽇志⽂件的最⼤限制,超出限制后会重新⽣成,并将旧的⽇志⽂件按照fileNamePattern设定的⽇志命名⽅式进⾏命名
<rollingPolicy class="ch.olling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>30</maxHistory>
<maxFileSize>100MB</maxFileSize>
</rollingPolicy>
⼦节点encoder
<encoder class="ch.qos.der.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%n</pattern>
</encoder>
对记录事件进⾏格式化,负责两件事,⼀是把⽇志信息转换成字节数组,⼆是把字节数组写⼊到输出流。
PatternLayoutEncoder 是唯⼀有⽤的且默认的encoder ,有⼀个节点,⽤来设置⽇志的输⼊格式。使⽤“%”加“转换符”⽅式,如果要输出“%”,则必须⽤“\”对“%”进⾏转义。⼦节点root
根loger,是所有loger的最上级,且只有⼀个level节点,⽤类设置打印⽇志的级别,默认值为debug,通常设置为info,此外还有trace、warn、error、all、off级别。
⼦节点appender-ref的ref属性指定⽇志组件名称,即appender的name属性值。
使⽤logback
在yml⽂件中增加fig指定配置⽂件地址,命名为logback时可以不需要配置,SpringBoot`会⾃动查。
level设置指定路径下的⽇志输出级别。
logging:
config: l
level:
com:
springboot: debug
如图所⽰,项⽬启动后,访问接⼝输出⽇志内容并⽣成指定⽇志⽂件:
内容参考