上一篇文章中简单介绍了springboot通过系统配置的方式配置日志:

SpringBoot使用默认的日志logback(1)—系统配置

这篇文章简单介绍一下日志的自定义配置。

1.自定义配置

spring boot官方推荐的日志配置如下:

日志系统配置
logbacklogback-spring.xml、logback-spring.groov、logbak.xml、logbak.groovy
log4j2log4j2-spring.xml、log4j2.xml
JDK(Java Util Logging)logging.properties

上面是spring boot官方文档的提示内容,意思是:根据您的日志记录系统,将加载相应的文件使用。即如果我们使用logback日志框架,那么可以使用logback-spring.xml、logback-spring.groovy、logback.xml、logback.groovy之一作为配置文件来加载。

spring boot官方建议使用logback-spring.xml作为logback框架的日志配置文件(例如:使用logback-spring.xml而不是logback.xml),因为带-spring后缀的配置文件可以使用spring boot提供的一些高级功能,如profile多环境日志输出。

我们加入日志配置的方式

server:
  port: 8082

# spring配置
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

# mybaits配置
mybatis:
  # 配置mapper的扫描,找到所有的mapper.xml映射文件
  mapper-locations: classpath*:mappers/**/*Mapper.xml
  # 搜索指定包别名
  type-aliases-package: site.longkui.**.entity

# 日志配置 (系统配置)
#logging:
#  pattern: #配置日志输出格式
#    file: "%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} === - %msg%n"
#  file:   #配置日志输出的文件
#    path: log1234  #日志输出的位置,默认是项目的根目录,会自动生成文件夹,而且默认状态日志名字都叫spring.log
#  level:  # 配置输出日志级别
#    root: debug  #设置整个项目的日志输出级别默认info(root表示整个项目)
#    site.longkui.app.mapper: INFO

# 日志配置
logging:
  config: classpath:logback-config.xml   #自定义日志配置文件

然后配置logback-spring.xml。配置位置在 src/main/resources。创建文件内容如下:

<?xml version="1.0" encoding="utf-8" ?>
<!--
1) 根节点<configuration>,包含下面三个属性:
    scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
    scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
    debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。-->
<configuration scan="true" scanPeriod="60" debug="false">

    <!--控制台输出日志格式-->
    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%d{yyyy-MM-dd HH:mm:ss} -- %-5level -- [%thread] -- %logger{50} --- %msg %n}"/>
    <!--文件输出日志格式-->
    <property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{yyyy-MM-dd hh:mm:ss} -- %-5level -- [%thread] -- %logger{50} --- %msg %n}"/>

    <!--
        Appender: 设置日志信息的去向,常用的有以下几个
           1) ch.qos.logback.core.ConsoleAppender (控制台)
           2) ch.qos.logback.core.rolling.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新文件)
           3) ch.qos.logback.core.FileAppender (文件)
    -->

    <!--控制台配置-->
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <!--当环境是dev开发环境时,这部分配置才生效-->
        <springProfile name="dev">
            <!--日志输出格式-->
            <encoder>
                <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            </encoder>
        </springProfile>
        <!--当环境不是dev开发环境时,这部分配置才生效-->
        <springProfile name="!dev">
            <!--日志输出格式-->
            <encoder>
                <pattern>--%logger{50} --- %msg %n</pattern>
            </encoder>
        </springProfile>
    </appender>

    <!--日志记录文件配置-->
    <appender name="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--当环境是production生产环境时,这部分配置才生效
                即在production生产环境上,我们才将日志信息记录到日志文件中-->
        <springProfile name="production">
            <!--日志文件保存路径,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建 -->-->
            <file>D:\idea\logs\example-logging.log</file>
            <!--基于大小和时间的轮转策略,当日志内容超出文件大小限制后,会自动生成一个文件来继续记录和重命名-->
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <!--当日志内容超出文件大小限制后,会自动生成一个文件来继续记录,文件按下面格式命名-->
                <fileNamePattern>D:\idea\logs\example-logging-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
                <!--文件最大限制,默认10MB-->
                <maxFileSize>10MB</maxFileSize>
                <!--文件最大保存周期,默认7天-->
                <maxHistory>7</maxHistory>
                <!--所有归档文件总的大小限制-->
                <totalSizeCap>20GB</totalSizeCap>
            </rollingPolicy>
            <!--日志输出格式-->
            <encoder>
                <pattern>${FILE_LOG_PATTERN}</pattern>
            </encoder>
        </springProfile>
    </appender>

    <!--
        用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。
        <logger>仅有一个name属性,一个可选的level和一个可选的addtivity属性
        name:
            用来指定受此logger约束的某一个包或者具体的某一个类。
        level:
            用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
            如果未设置此属性,那么当前logger将会继承上级的级别。
        additivity:
            是否向上级logger传递打印信息。默认是true。
        <logger>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个logger
    -->
    <springProfile name="dev">
        <logger name="site.longkui.app.mapper" level="DEBUG" />
    </springProfile>

    <root level="debug">
        <appender-ref ref="consoleAppender"/>
        <appender-ref ref="fileAppender"/>
    </root>

</configuration>

上面的xml文件,是简单配置文件。

下面这篇文章会详细解释log4j2.xml文件配置。

2.控制台输出sql

编写程序时,经常需要输出sql,如果是系统配置日志的方式,只要参考上一篇文章,SpringBoot使用默认的日志logback(1)—系统配置 – 每天进步一点点 (longkui.site)

把root设置为debug即可。

这篇文章中自定义方式,设置下面的方式即可。

 <springProfile name="dev">
        <logger name="xxx.xxx.xxx.mapper" level="DEBUG" />
    </springProfile>

注意,这个地方的logger的name要设置成自己项目的mapper,level=DEBUG。

这时,重新运行程序后,就可以在控制台打印出sql了。