天天看点

Spring Boot 进阶-SpringBoot日志配置详解

作者:架构师面试宝典
Spring Boot 进阶-SpringBoot日志配置详解

在上篇文章结束的时候,我们进行了自定的日志配置,并且引入了XML日志配置文件,这里我们就来详细看一下XML日志配置文件的使用。

首先需要在src/resource/路径下创建一个logback-spring.xml的配置文件。加入如下的内容。内容来源于开源框架,这里仅做说明使用

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!-- 日志存放路径 -->
    <property name="log.path" value="./logs" />
    <!-- 日志输出格式 -->
    <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />

    <!-- 控制台输出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>

    <!-- 系统日志输出 -->
    <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/sys-info.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志最大的历史 60天 -->
            <maxHistory>60</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>INFO</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/sys-error.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志最大的历史 60天 -->
            <maxHistory>60</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>ERROR</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 用户访问日志输出  -->
    <appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/sys-user.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 按天回滚 daily -->
            <fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志最大的历史 60天 -->
            <maxHistory>60</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>

    <!-- 系统模块日志级别控制  -->
    <logger name="com.example.demo" level="info" />
    <!-- Spring日志级别控制  -->
    <logger name="org.springframework" level="warn" />

    <root level="info">
        <appender-ref ref="console" />
    </root>

    <!--系统操作日志-->
    <root level="info">
        <appender-ref ref="file_info" />
        <appender-ref ref="file_error" />
    </root>

    <!--系统用户操作日志-->
    <logger name="sys-user" level="info">
        <appender-ref ref="sys-user"/>
    </logger>
</configuration>           

configuration 节点

这个是日志配置的根节点,它包含有三个属性

  • scan:这个属性设置为ture的时候,配置文件如果发生了变化,就会被重新加载,默认是ture。
  • scanPeriod:设置监控配置文件是否配置修改时间的间隔,如果没有给定单位,则默认是毫秒,但scan的属性为ture的时候,这个属性配置就会生效,默认的时间间隔是1分钟。
  • debug:这个属性默认是false,当这个属性为ture的时候,就会打印出logback的内部日志信息,并且支持实时查看logback运行状态。

root节点

这个节点是必填节点用来指定基础日志级别,只有一个level属性,用来设置日志等级,默认值是DEBUG。这个节点可以包含零个或者是多个节点。

contextName节点

标识一个上下文的名称,默认是default,一般开发设置中不需要对其进行设置

property节点

标记上下文的变量,属性是name和value,在其中定义好变量之后可以通过SPEL表达式来进行获取。如上代码中展示的${log.path} 用来获取自己设置的日志路径。

appender节点

用来格式化日志输出节点,有name和class两个属性,class用来指定输出策略,也就是是使用控制台输出还是使用文件输出,name来配置一个标识。

这个节点在配置中是一个比较重要的节点,一般的配置文件中需要定义三个这样的节点,一个是控制台输出,一个是常规日志输出,一个是异常文件输出,这个节点有如下几个子节点。

  • filter:日志输出的拦截器配置节点,如果没有特殊设置,都是采用系统自带的拦截器,如果需要将日志进行拦截过滤的场景中使用,则需要对这个节点进行设置。
  • encoder:与pattern节点组合用来设置日志的编码方式和日志的输出格式。
  • file:这个节点用来设置日志的输出路径,可以指定相对路径也可以指定绝对路径。
  • rollingPolicy:日志回滚策略设置,常用的日志策略就是TimeBasedRollingPolicy,基于事件的回滚策略,下设fileNamePattern用来指定日志归档策略
  • maxHistory:设置文档最大保留时间。
  • totalSizeCap:用来设置日志文件保留上限大小,到达指定大小之后日志就会被删除。

logger节点

这个节点主要用来指定包的日志级别设置。如果设置了这个节点,则会覆盖root节点的日志级别设置

  • name:用来设置指定包路径
  • level:用来设置日志级别
  • addtivity:可选,默认传值true,将logger的信息向上传递到root,如果设置为false则不会上传。就需要设置一个appender-ref的节点配置才会有日志输出。

总结

整个的日志配置文件介绍到这里就结束了,在日志配置文件中,基础的配置就这些,我们可以根据自己的需求来设置不同的策略将不同的日志输出到不同的文件中,方便后续的日志采集与系统维护,也希望能够帮助大家更好的理解SpringBoot日志文件配置。

继续阅读