基本配置

Spring Boot 默认使用 Logback 作为日志框架,在 application.properties 中进行配置:

# 日志目录
logging.path = /usr/local/temp/tao/logs

# 日志级别
logging.level.com.tao.mapper = DEBUG
logging.pattern.console = %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%F-%M\\(\\):%L] - %msg%n

根日志 logging.level.root 默认为 INFO,不建议在 application.properties 中修改它,推荐使用命令行参数开启根日志的 DEBUG 级别:

gradle bootRun --debug
java –jar demo.jar --debug

自定义配置

很多时候需要自定义日志,在 resources/logback-spring.xml 配置就可以了,会覆盖 Spring Boot 默认的和 application.properties 中的日志配置,下面是项目中的案例:

<?xml version="1.0"?>
<configuration scan="true" scanPeriod="30 seconds">
    <!-- 日志目录 -->
    <property name="logPath" value="${LOG_PATH:-logs}"/>

    <!-- 日志格式 -->
    <property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%F-%M\\(\\):%L] - %msg%n"/>

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

    <!-- 所有日志 -->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${pattern}</pattern>
        </encoder>

        <file>${logPath}/log.txt</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/log_%d{yyyyMMdd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- 错误日志: 级别大于等于 WARN 的日志再次写入错误日志文件 -->
    <appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>WARN</level>
        </filter>

        <encoder>
            <pattern>${pattern}</pattern>
        </encoder>

        <file>${logPath}/log_error.txt</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/log_error_%d{yyyyMMdd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>

    <!-- 根日志对象 -->
    <root level="info">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
        <appender-ref ref="error"/>
    </root>

    <!-- 控制每一个包的日志级别: 可以配置 application.properties 中的 logging.level.com.xtuer=DEBUG 进行配置 -->
    <!-- <logger name="com.tao.mapper" level="${logLevel}"/>-->
    <!-- <logger name="com.tao"        level="${logLevel}"/>-->
</configuration>

通过自定义变量方便改变日志行为,logback-spring.xml 中使用变量:

  • LOG_PATH 是 Spring Boot 自动创建的变量,为 application.properties 中的 logging.path 的值,如果没有则为未定义
  • $ 表示 application.properties 中配置了 logging.path 的话使用它的值,否则使用默认值 logs (:- 后面的部分),详情可参考 LOG_PATH_IS_UNDEFINED
  • 如果想使用 application.properties 中的变量,可以参考 Spring Boot 配置 Logback日志
  • logger 的 level 也受 application.properties 里的 logging.level 控制,这样还可以从命令行参数在运行时根据需要进行控制

打印 URL

logging.level.org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping = trace