SpringBoot基础 | 第四章 - 日志配置

SpringBoot基础教程

环境

JDK1.8
Maven

工具

IntelliJ IDEA

SpringBoot基础 | 第一章 - 快速搭建Web应用
SpringBoot基础 | 第二章 - 配置热部署
SpringBoot基础 | 第三章 - 使用配置文件
SpringBoot基础 | 第四章 - 日志配置
SpringBoot基础 | 第五章 - 整合lombok
SpringBoot基础 | 第六章 - 整合SpringDataJPA
SpringBoot基础 | 第七章 - 整合缓存 SpringDataCache
SpringBoot基础 | 第八章 - 整合Mybatis
SpringBoot基础 | 第九章 - 整合Mapper3实现MyBatis通用Mapper
SpringBoot基础 | 第十章 - 整合PageHelper实现分页查询


SpringBoot 默认使用 Logback 作为日志输出工具,同时也支持 Java Util Logging 及 Log4J2。

一、显式引入 logback 依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
</dependency>
二、设置日志输出级别

日志级别从低到高分为

TRACE < DEBUG < INFO < WARN < ERROR < FATAL

日志级别配置的前缀为 logging.level

root 用于设置应用的日志级别,也可以对指定包设置单独的日志级别

logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
三、文件输出

默认情况下,SpringBoot 只输出日志至控制台,不会输出到文件。

但其实 SpringBoot 的日志默认配置中是有设置文件输出的,通过属性 logging.file 或 logging.path 进行开启

  • logging.file 设置文件,可以是绝对路径,也可以是相对路径。该配置比 logging.path 优先级更高。
  • logging.path 设置目录,会在该目录下创建spring.log文件。
logging.path=/var/log/
logging.file=/var/log/log.log
三、自定义 logback 日志输出

SpringBoot 默认会加载 logback-spring.xml 或者 logback.xml 中的配置,SpringBoot 推荐使用 logback-spring.xml

日志中可以使用的配置属性

属性名参数名说明
logging.exception-conversion-wordLOG_EXCEPTION_CONVERSION_WORD
logging.fileLOG_FILE日志输出文件名
logging.pathLOG_PATH日志输出路径
logging.file.max-sizeLOG_FILE_MAX_SIZE输出日志文件大小限制
logging.file.max-historyLOG_FILE_MAX_HISTORY输出日志保留数量
logging.pattern.consoleCONSOLE_LOG_PATTERN日志输出格式(命令行)
logging.pattern.dateformatLOG_DATEFORMAT_PATTERN日志输出时间格式
logging.pattern.fileFILE_LOG_PATTERN日志输出格式(文件)
logging.pattern.levelLOG_LEVEL_PATTERN日志级别输出格式,默认为(%5p)
PIDPID当前应用的PID

格式

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
...
</configuration>

参数介绍

  • scan 为 true 时,配置文件如果发生改变,将会被重新加载,默认为 true。
  • scanPeriod 扫描间隔时间,默认单位为毫秒,默认为 1 分钟。
  • debug 为 true 时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。

节点介绍

1、contextName

设置上下文名称,默认为 default,通过 %contextName 来打印日志上下文名称,一般来说我们不用这个属性。

<contextName>logback</contextName>

2、property

设置变量,可以使“${}”来使用变量。

<property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p --- [%15.15t] %-40.40logger{39} : %m%n"/>
<property name="LOG_FILE" value="spring.log"/>
<property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p --- [%t] %-40.40logger{39} : %m%n"/>

3、root

必选节点,用来指定日志输出级别,只有一个level属性,默认是DEBUG。

<root level="debug">
  <appender-ref ref="console" />
  <appender-ref ref="file" />
</root>

4、appender

  • ConsoleAppender

输出至控制台

<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>${CONSOLE_LOG_PATTERN}</pattern>
    </encoder>
</appender>
  • RollingFileAppender

输出至文件,当文件达到指定大小时自动进行切分

<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <encoder>
        <pattern>${FILE_LOG_PATTERN}</pattern>
    </encoder>
    <!-- 如果没有 file 属性,那么只会使用 fileNamePattern 的文件路径规则 -->
    <!-- 如果即有 file 属性又有 fileNamePattern 属性,那么当天日志文件名使用 file 的配置,而以往的日志文件则会使用 fileNamePattern 的配置-->
    <file>${LOG_FILE}</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <!-- 文件路径,定义了日志的切分方式,把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间 -->
        <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
        <!-- 单个日志文件最大值,大于该值时则会根据 fileNamePattern 规则 %i 生成新的日志文件 -->
        <maxFileSize>10MB</maxFileSize>
        <!-- 只保留最近30天的日志 -->
        <maxHistory>30</maxHistory>
    </rollingPolicy>
</appender>

5、logger

对指定包或者指定类进行日志输出设置

设置包 com.msf.controller 的日志打印级别为 warn,且只在命令行输出

<logger name="com.msf.controller" level="WARN" additivity="false">
    <appender-ref ref="console"/>
</logger>

测试

@RequestMapping("/")
public String sayHello() {
    LOGGER.info("info");
    LOGGER.debug("debug");
    LOGGER.warn("warn");
    LOGGER.error("error");
    return "Hello";
}

可以看到命令行输出内容如下,info 以及 debug 的内容并没有被输出,查看日志文件则没有任何输出

WARN --- [nio-8080-exec-2] com.msf.controller.HelloController       : warn
ERROR --- [nio-8080-exec-2] com.msf.controller.HelloController      : error

范围有重叠的话,范围小的有效。

6、springProfile

多环境日志输出,多个 profile 使用逗号间隔,也可以使用 ! 表示否的意思

<!-- 开发、测试环境 -->
<springProfile name="test,dev">
    <logger name="com.msf.controller" level="DEBUG" additivity="false">
        <appender-ref ref="console"/>
    </logger>
</springProfile>

<!-- 生产环境 -->
<springProfile name="prod">
    <logger name="com.msf.controller" level="WARN" additivity="false">
        <appender-ref ref="console"/>
        <appender-ref ref="file" />
    </logger>
</springProfile>

配置 profile

spring.profiles.active=dev

7、springProperty

在日志配置文件中引用 application.properties 配置

在 application.properties 中添加配置

app.name=msf

在 logback-spring.xml 中添加 springProperty 元素对 app.name 进行引用

<springProperty scope="context" name="appname" source="app.name"/>

springProperty 的使用跟 property 元素是一样的

最后帖一下通过本文系列操作后,形成最终配置文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <springProperty scope="context" name="appName" source="app.name"/>

    <property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${appName}--- [%15.15t] %-40.40logger{39} : %m%n"/>
    <property name="LOG_FILE" value="spring.log"/>
    <property name="FILE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p --- [%t] %-40.40logger{39} : %m%n"/>


    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <!-- 如果没有 file 属性,那么只会使用 fileNamePattern 的文件路径规则 -->
        <!-- 如果即有 file 属性又有 fileNamePattern 属性,那么当天日志文件名使用 file 的配置,而以往的日志文件则会使用 fileNamePattern 的配置-->
        <file>${LOG_FILE}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 文件路径,定义了日志的切分方式,把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间 -->
            <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
            <!-- 单个日志文件最大值,大于该值时则会根据 fileNamePattern 规则 %i 生成新的日志文件 -->
            <maxFileSize>10MB</maxFileSize>
            <!-- 只保留最近30天的日志 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- 开发、测试环境 -->
    <springProfile name="test,dev">
        <logger name="com.msf.controller" level="DEBUG" additivity="false">
            <appender-ref ref="console"/>
        </logger>
    </springProfile>

    <!-- 生产环境 -->
    <springProfile name="prod">
        <logger name="com.msf.controller" level="WARN" additivity="false">
            <appender-ref ref="console"/>
            <appender-ref ref="file" />
        </logger>
    </springProfile>

    <root level="debug">
        <appender-ref ref="console" />
        <appender-ref ref="file" />
    </root>
</configuration>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值