本文内容:springboot 对logback 日志集成的代码实现及部分代码详细讲解。
1
代码实现
<?xml version="1.0" encoding="UTF-8"?>
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName>spring-boot-logging</contextName>
<property name="log.path" value="src/main/resources/log" />
<!--输出到控制台-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- 级别过滤 -->
<!-- filter是一个过滤器,表示对输出到控制台的日记进行过滤。有两种过滤器,分别为LevelFilter 和ThresholdFilter -->
<!--LevelFilter 为级别过滤器,根据日志级别进行过滤。其下有三个子节点,level表示过滤的级别,用于配置符合过滤条件的操作,ACCEPT符合级别的输出到控制台,用于配置不符合过滤条件的操作,DENY不符合的拒绝输出到控制台。 -->
<!--ThresholdFilter为临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<!--对日志进行格式化 -->
<!-- %d{HH:mm:ss.SSS} :日志的输出时间 -->
<!-- %contextName : 上下文名称 -->
<!-- %thread : 输出日志的进程名字,这在Web应用以及异步任务处理中很有用 -->
<!-- %-5level : 日志级别,并且使用5个字符靠左对齐 -->
<!-- %logger{36} : 日志输出者的名字(一般为类名),名字最长36个字符,否则按照句点分割 -->
<!-- %msg : 具体的日志消息 -->
<!-- %n :换行符 -->
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!--输出到文件-->
<!-- RollingFileAppender用于切分文件日志 -->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--<file>:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。 -->
<!--file子节点可有可无,通过设置file,可以为活动文件和归档文件指定不同位置,当前日志总是记录到file指定的文件(活动文件) -->
<!--活动文件的名字不会改变;如果没设置file,活动文件的名字会根据fileNamePattern 的值,每隔一段时间改变一次。“/”或者“\”会被当做目录分隔符。 -->
<!--<file>${log.path}/spring-boot-logging.log</file> -->
<!--<append>:如果是 true,日志被追加到文件结尾,如果是 false,清空现存文件,默认是true -->
<append>true</append>
<!-- class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"是最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责触发滚动 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--定义了日志的切分方式——把每一天的日志归档到一个文件中 -->
<fileNamePattern>${log.path}/springboot-logging.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 日志保存周期:只保留最近30天的日志 -->
<maxHistory>7</maxHistory>
<!-- 总大小 -->
<totalSizeCap>30MB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性,默认是DEBUG -->
<root level="info">
<appender-ref ref="console" />
</root>
<!-- mybatis的sql查询日志希望特殊处理,只输出到一个专门的文件 -->
<!--<logger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。 -->
<!-- 1)name:用来指定受此logger约束的某一个包或者具体的某一个类 -->
<!-- 2)level:用来设置打印级别,大小写无关(最常用的几种):DEBUG, INFO, WARN, ERROR.如果未设置此属性,那么当前loger将会继承上级的级别-->
<!-- 3)addtivity:是否向上级loger传递打印信息。默认是true -->
<logger name="com.example.demo.mapper" level="DEBUG" addtivity="false">
<appender-ref ref="file" />
</logger>
<!-- 生产环境配置,需要激活profile-->
<!-- <springProfile name="dev"> -->
<!-- <logger name="com.baiding" level="info"/> -->
<!-- </springProfile> -->
<!-- <springProfile name="prod"> -->
<!-- <logger name="com.baiding" level="warn"/> -->
<!-- </springProfile> -->
</configuration>
2
代码讲解
根节点
<configuration scan="true" scanPeriod="60 seconds" debug="false"></configuration>
-
scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
-
scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
-
<debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
filter 过滤器
<filter class="ch.qos.logback.classic.filter.LevelFilter"></filter>
filter是一个过滤器,表示对输出到控制台的日记进行过滤。有两种过滤器,分别为LevelFilter 和ThresholdFilter。
1、LevelFilter为级别过滤器,根据日志级别进行过滤。其下有三个子节点,level表示过滤的级别,用于配置符合过滤条件的操作,ACCEPT符合级别的输出到控制台,用于配置不符合过滤条件的操作,DENY不符合的拒绝输出到控制台。
2、ThresholdFilter为临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝。
日志格式化
<encoder> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern></encoder>
-
%d{HH:mm:ss.SSS} :日志的输出时间
-
%contextName :上下文名称
-
%thread : 输出日志的进程名字,这在Web应用以及异步任务处理中很有用
-
%-5level : 日志级别,并且使用5个字符靠左对齐
-
%logger{36} : 日志输出者的名字(一般为类名),名字最长36个字符,否则按照句点分割
-
%msg :具体的日志消息
-
%n :换行符
<file>节点
<file>${log.path}/spring-boot-logging.log</file>
<file>:被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。
1、file子节点可有可无,通过设置file,可以为活动文件和归档文件指定不同位置,当前日志总是记录到file指定的文件(活动文件)。
2、活动文件的名字不会改变;如果没设置file,活动文件的名字会根据fileNamePattern 的值,每隔一段时间改变一次。“/”或者“\”会被当做目录分隔符。
子节点logger
<logger name="com.example.demo.mapper" level="DEBUG" addtivity="false"></logger>
<logger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。
-
name:用来指定受此logger约束的某一个包或者具体的某一个类。
-
level:用来设置打印级别,大小写无关(最常用的几种):DEBUG, INFO, WARN, ERROR.如果未设置此属性,那么当前loger将会继承上级的级别。
-
addtivity:是否向上级loger传递打印信息。默认是true 。
3
测试
在地址栏输入http://localhost:8080/hospital/login ,登陆成功后查看src/main/resources/log/springboot-logging.2019-10-09.log 文件,得到以下信息:d
至此,本文结束。欢迎各位关注我的公众号:暗星涌动。
往期文章: