Spring Boot日志配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot日志配置相关的知识,希望对你有一定的参考价值。

Spring Boot默认是使用logback

之前在Spring中使用logback的时候是需要加入slf4j和logback的依赖的

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.21</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.1.7</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.7</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-access</artifactId>
    <version>1.1.7</version>
</dependency>

在Spring Boot中默认已经引入了相关的jar包,所以就不需要额外手动引入了~

技术分享

logback是一款优秀的日志框架,本文就介绍logback

spring boot默认会加载classpath:logback-spring.xml或者classpath:logback-spring.groovy

当然,日志文件的名称也可以采用自定义的方式,此时需要在properties文件中加入以下配置::

logging.config=classpath:logback-winner.xml

注意:不要使用logback这个来命名,否则spring boot将不能完全实例化

项目结构:

技术分享

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 文件输出格式 -->
    <property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
    <!-- test文件路径 -->
    <property name="TEST_FILE_PATH" value="/opt/winner/logs"/>
    <!-- pro文件路径 -->
    <property name="PRO_FILE_PATH" value="/opt/winner_0715/logs"/>

    <!-- 开发环境 -->
    <springProfile name="dev">
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>${PATTERN}</pattern>
            </encoder>
        </appender>
        <root level="INFO">
            <appender-ref ref="STDOUT"/>
        </root>
    </springProfile>

    <!-- 测试环境 -->
    <springProfile name="test">

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

        <!-- ch.qos.logback.core.rolling.RollingFileAppender 文件日志输出 -->
        <appender name="TEST-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!--不能有这项配置!!!!!-->
            <!--<Encoding>UTF-8</Encoding>-->
            <File>${TEST_FILE_PATH}/guide.log</File>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <FileNamePattern>${TEST_FILE_PATH}/guide.%d{yyyy-MM-dd}-%i.log</FileNamePattern>
                <MaxHistory>30</MaxHistory>
                <TimeBasedFileNamingAndTriggeringPolicy
                        class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <MaxFileSize>10KB</MaxFileSize>
                </TimeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>

            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>${PATTERN}</pattern>
            </layout>
        </appender>
        <root level="info">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="TEST-FILE"/>
        </root>
    </springProfile>

    <!-- 生产环境 -->
    <springProfile name="prd">
        <!-- ch.qos.logback.core.rolling.RollingFileAppender 文件日志输出 -->
        <appender name="PROD_FILE"
                  class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!--<Encoding>UTF-8</Encoding>-->
            <File>${PRO_FILE_PATH}/guide.log</File>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <FileNamePattern>${PRO_FILE_PATH}/guide.%d{yyyy-MM-dd}-%i.log</FileNamePattern>
                <MaxHistory>30</MaxHistory>
                <TimeBasedFileNamingAndTriggeringPolicy
                        class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <MaxFileSize>50MB</MaxFileSize>
                </TimeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>${PATTERN}</pattern>
            </layout>
        </appender>
        <root level="INFO">
            <appender-ref ref="PROD_FILE"/>
        </root>
    </springProfile>
</configuration>

注意,这里的springProfile 的名字与properties文件各个环境的名字要保持一致~

 下面简单说一下File和FileNamePattern两个标签的含义:

<File>${TEST_FILE_PATH}/guide.log</File>
<FileNamePattern>${TEST_FILE_PATH}/guide.%d{yyyy-MM-dd}-%i.log</FileNamePattern>

这两项的配置的意思是:

日志首先写入到文件技术分享中,当这个文件的大小超过设置的MaxFileSize时,就会把这个文件分割,分割后的文件命名按照技术分享来命名,为了方便,我上面将MaxFileSize设置为10KB,实际效果如下:

技术分享

PS:被其中的一项配置折磨到死:

<Encoding>UTF-8</Encoding>

没错,就是它,在Spring中配置这一项是没错的,但是在Spring Boot中配置这一项不行,原因暂时未知

以上是关于Spring Boot日志配置的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot - Logback配置日志要考虑哪些因素

spring-boot中logback日志配置

spring boot slf4j日记记录配置详解

Spring Boot配置保存日志文件

Spring Boot中的日志配置

Spring Boot的特性: 自定义日志配置