springboot配置logback日志系统 springboot项目配置logback日志系统的实现
蒲公英不是梦 人气:2记录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,所以,无需额外添加依赖,直接配置logback.xml
就可以了。
此外,如果需要切换为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
包下查找logback-test.xml
或logback.xml
,如果这两个都不存在,则会调用BasicConfigurator
,创建一个最小化的基本配置。
最小化配置由一个关联到根logger
的ConsoleAppender
组成,默认输出模式为%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
,root logger
级别为DEBUG
,所以并不会生成日志文件,只会输出到控制台。
创建logback.xml配置文件
通过自定义logback.xml
配置文件来控制日志输出情况,通常我们会配置三个日志组件:
- 控制台输出
- 输出info级别日志文件
- 输出error级别日志文件
以下为logback.xml
完整配置
<!-- Logback configuration. See http://logback.qos.ch/manual/index.html --> <configuration scan="true" scanPeriod="2 seconds"> <!--定义日志文件的存储地址--> <property name="LOG_PATH" value="./logs" /> <!-- 控制台输出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.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.qos.logback.core.rolling.RollingFileAppender"> <!-- 日志文件输出的文件名 --> <File>${LOG_PATH}/info.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 每日生成日志文件或日志文件大小超出限制后输出的文件名模板 --> <fileNamePattern>${LOG_PATH}/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 日志文件保留天数 --> <maxHistory>30</maxHistory> <!-- 日志文件最大大小:100MB --> <maxFileSize>100MB</maxFileSize> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.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.qos.logback.core.rolling.RollingFileAppender"> <!-- 日志输出级别,优先级 > '<root level>' --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <File>${LOG_PATH}/error.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <maxHistory>30</maxHistory> <maxFileSize>100MB</maxFileSize> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.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.qos.logback.core.ConsoleAppender"> </appender>
是负责写日志的组件,通过自定义日志组件控制日志输出的情况,包含以下两个属性:
- name:组件名称
- class:组件class指定的类名
不同的class,对应不同的功能:
如ch.qos.logback.core.ConsoleAppender
会把日志输出到控制台
ch.qos.logback.core.rolling.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.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy
包含以下三个属性:
- fileNamePattern:发生滚动时的日志命名方式
- maxHistory:日志文件的最大保留时间,超过设定时间后会自动删除
- maxFileSize:每份日志文件的最大限制,超出限制后会重新生成,并将旧的日志文件按照fileNamePattern设定的日志命名方式进行命名
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <maxHistory>30</maxHistory> <maxFileSize>100MB</maxFileSize> </rollingPolicy>
子节点encoder
<encoder class="ch.qos.logback.classic.encoder.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
文件中增加logging.config
指定配置文件地址,命名为logback时可以不需要配置,
SpringBoot`会自动查找。
level
设置指定路径下的日志输出级别。
logging: config: classpath:logback.xml level: com: springboot: debug
如图所示,项目启动后,访问接口输出日志内容并生成指定日志文件:
内容参考
加载全部内容