使用介绍
logback依赖坐标
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
由于springboot框架本身就使用了logback作为日志框架,所以,在springboot项目中我们无须在引入logback依赖。(依赖的传递性)
感兴趣的可以点击一下坐标引用链向查看,最终会找到logback坐标
<artifactId>spring-boot-starter-web</artifactId>
<artifactId>spring-boot-starter</artifactId>
<artifactId>spring-boot-starter-logging</artifactId>
多环境配置
默认配置文件叫logback.xml
如果不想使用这个默认的文件名称(多环境配置多套),需要再application.yml文件中指定配置文件,如下:
server:
port: 8081
#如果logback配置文件不使用配置文件默认的名称logback.xml 则需要在此处配置文件地址和名称
logging:
config: classpath:logback-dev.xml
配置文件讲解
<?xml version="1.0" encoding="UTF-8"?>
<!--logback使用xml文件作为配置
根节点:configuration 属性有scan、scanPeriod、debug
scan:当配置文件被修改后,将会被重新加载,默认值为true
scanPeriod:设置检测配置文件是否有修改的 时间间隔,时间单位默认为毫秒(也可以自己指定单位) 当scan属性为true时,此属性生效,默认的时间间隔为1分钟(60000毫秒)
debug:是否打印logback内部日志信息,默认值为false
configuration标签的子节点有: contextName,property,appender,logger,root
contextName:应用上下文名称,一般不用配置
property:用来自定义变量和变量值的标签 有两个属性name和value ,name变量名称,value是为变量定义的值,可以通过${变量名}来使用
appender:用来格式化日志输出节点,两个属性name 和class ,class 用来指定那种输出策略
输出策略有:
ConsoleAppender:日志输出到控制台,类名:ch.qos.logback.core.ConsoleAppender
FileAppender:日志输出到文件:类名:ch.qos.logback.core.FileAppender,目标文件可以指定,如果改文件已经存在,它将根据附加属性的值被追加或者截断
RollingFileAppender:滚动记录文件,FileAppender的子类。 当符合条件(大小,时间)日志进行切分处理。类名:ch.qos.logback.core.rolling.RollingFileAppender
RollingFileAppender 有子标签RollingPolicy(滚动策略) 和TriggeringPolicy(触发策略),如果RollingPolicy也实现了TriggeringPolicy接口,那只需要配置前者
滚动策略;TimeBasedRollingPolicy(时间基准滚动策略,目前流行使用的策略) SizeAndTimeBasedRollingPolicy(按日期对文件进行存档策略)
appender的子标签
<filter> :logback具有过滤支持。logback允许给日志记录器appender配置一个或多个Filter,当满足过滤器指定的条件时,才记录日志。
LevelFilter:对指定level的日志进行记录,不等于指定level的日志不记录
ThresholdFilter:对指定level的日志进行记录,对不等于指定level的日志不记录 (为系统定义的拦截器)
EvaluatorFilter:对满足指定表达式的日志进行记录,对不满足指定表达式的日志不做记录。
MDCFilter
logger标签:用来指定某一个包或者具体某一个类的日志打印级别,以及指定使用那个appender(输出目的地的意思)
属性有name, level,additivity(可加性)
name属性:用来指定受此约束的某一个包或者具体的某一个类
level属性:用来设置打印级别,大小写无关:TRACE,DEBUG,INFO,WARN,ERROR,ALL
additivity属性:是否向上级logger传递打印信息,默认为true
logger中可以有多个appender-ref (输出端控制项)
示例:<logger name="com.example" additivity="false" level="ERROR">
<appender-ref ref="error"/>
</logger>
控制com.example包下的日志打印,打印级别为ERROR,additivity属性为false,表示此logger的打印信息不在向上级传递,指定了名字为error的appender
root标签:用来指定最基础的日志输出级别,可以理解为根logger,只有一个level属性,默认是DEBUG. root可以包含零个或多个<appender_ref>元素
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 从高到地低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
<!-- 日志输出规则 根据当前ROOT 级别,日志输出时,级别高于root默认的级别时 会输出 -->
<!-- %n为换行的意思 %X{X-B3-TraceId}/%X{X-B3-SpanId} 表是打印的traceId,链路追踪的探针标记(链路追踪是可以自己实现的)-->
<!-- 以下 每个配置的 filter 是过滤掉输出文件里面,会出现高级别文件,依然出现低级别的日志信息,通过filter 过滤只记录本级别的日志-->
<!--<property name="SERVER_HOME" value="../logs/"/>-->
<property name="LOG_DIR" value="/Users/tyw/Documents/2023持续学习/学习资料/logback_log"/>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date %level [%thread-%X{X-B3-TraceId}/%X{X-B3-SpanId}] %logger{10} [%file:%line]
%msg%n
</pattern>
<!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
<!-- 以下的大概意思是:1.先按日期存日志,日期变了,将前一天的日志文件名重命名为XXX%日期%索引,新的日志仍然是demo.log -->
<!-- 2.如果日期没有发生变化,但是当前日志的文件大小超过1KB时,对当前日志进行分割 重命名-->
<appender name="error_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/error.log</file>
<encoder>
<pattern>%date %level [%thread] %logger{30} [%file:%line] %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/logs/error.%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
<maxHistory>5</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>1kb</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!--级别过滤器 根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMtach 和onMismatch接受或决绝日志-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="info_file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_DIR}/info.log</file>
<encoder>
<pattern>%date %level [%thread] %logger{30} [%file:%line] %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_DIR}/logs/info.%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
<maxHistory>5</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>1kb</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!--级别过滤器 根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMtach 和onMismatch接受或决绝日志-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 指定项目中某个包,当有日志操作行为时的日志记录级别 -->
<logger name="org.apache.zookeeper" level="WARN"/>
<logger name="org.springframework" level="WARN" additivity="false"/>
<logger name="org.mybatis" level="WARN"/>
<logger name="com.tyw" level="DEBUG"/>
<!-- com.xianzhi为根包,也就是只要是发生在这个根包下面的所有日志操作行为的权限都是DEBUG -->
<!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE -->
<root level="info">
<appender-ref ref="stdout"/>
<appender-ref ref="info_file"/>
<appender-ref ref="error_file"/>
</root>
</configuration>
最后的效果:写个demoController测试就行