SpringBoot2多環境配置logback滾動日誌

Maven需要的配置如下:

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <spring.profiles.active>dev</spring.profiles.active>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>test</id>
            <properties>
                <spring.profiles.active>test</spring.profiles.active>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <spring.profiles.active>prod</spring.profiles.active>
            </properties>
        </profile>
    </profiles>

springboot的aplication.yml配置如下:

spring:
  application:
    name: Demo
  profiles:
    active: @spring.profiles.active@

需要創建三個不同環境配置文件,分別命名爲:

application-dev.yml

application-prod.yml

application-test.yml

如圖:

logback的配置文件命名爲logback-spring.xml,springboot會自動識別,內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds" debug="false">
    <!--日誌文件主目錄:程序目錄-->
    <!-- 自定義標籤,後面可以用${}引用 -->
    <!-- 日誌級別 -->
    <property name="log.level" value="debug"/>
    <!-- 日誌最大存儲個數,如果打包的命名設置到天,則表示最多存3天的,若設置到時表示最多存3小時的 -->
    <property name="log.maxHistory" value="3"/>
    <property name="log.maxFileSize" value="1KB"/>
    <!-- 讀取springboot配置文件application.yml中的屬性標籤,此處讀取的日誌存放路徑,不帶文件名,文件名後面根據級別命名 -->
    <springProperty scope="context" name="log.filePath" source="logging.file.path"/>
    <!-- 日誌的打印格式,不帶顏色,因爲帶顏色的在文件中不顯示 -->
    <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{10}: %msg%n"/>
    <!-- 控制檯日誌的打印格式,帶顏色的 -->
    <property name="logconsole.pattern" value="%red(%d{yyyy-MM-dd HH:mm:ss.SSS}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{10}): %cyan(%msg%n)"/>

    <!-- 控制檯中的打印配置 -->
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${logconsole.pattern}</pattern>
        </encoder>
    </appender>

    <!-- debug日誌在文件中打印的滾動日誌配置,會單獨生成一個文件 -->
    <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 設置輸出文件名 -->
        <file>${log.filePath}/debug.log</file>
        <!-- 按照時間滾動自動打包存檔 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 打包的文件名,當前設置到分(HH_mm)級別 -->
            <fileNamePattern>${log.filePath}/debug/debug-%d{yyyy-MM-dd_HH_mm}-log.zip</fileNamePattern>
            <!-- 一分鐘打包一個,最多存三個 -->
            <maxHistory>${log.maxHistory}</maxHistory>
            <totalSizeCap>${log.maxFileSize}</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <!-- 日誌過濾,匹配到DEBUG級別的才輸出到此文件,未匹配到的不輸出 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- info日誌在文件中打印的配置,會單獨生成一個文件 -->
    <appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.filePath}/info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.filePath}/info/info-%d{yyyy-MM-dd_HH_mm}-log.zip</fileNamePattern>
            <maxHistory>${log.maxHistory}</maxHistory>
            <totalSizeCap>${log.maxFileSize}</totalSizeCap>
        </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>

    <!-- error日誌在文件中打印的配置,會單獨生成一個文件 -->
    <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.filePath}/error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.filePath}/error/error-%d{yyyy-MM-dd_HH_mm}-log.zip</fileNamePattern>
            <maxHistory>${log.maxHistory}</maxHistory>
            <totalSizeCap>${log.maxFileSize}</totalSizeCap>
        </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>

    <!-- 開發環境配置自動根據springboot配置的環境配置(此配置根據maven的配置生效)生效 -->
    <springProfile name="dev">
        <!-- 配置的name值可以設置只在某包下的類生效,addtivity爲true時相當於繼承了root的配置,這樣就會在控制檯中也打印日誌了,無需在此寫一遍consoleAppender -->
        <logger name="com.study.demo" level="${log.level}" additivity="true">
            <appender-ref ref="debugAppender"/>
            <appender-ref ref="infoAppender"/>
            <appender-ref ref="errorAppender"/>
        </logger>
    </springProfile>

    <springProfile name="test">
        <logger name="com.study.demo" level="debug" additivity="true">
            <appender-ref ref="debugAppender"/>
            <!--<appender-ref ref="infoAppender"/>-->
            <appender-ref ref="errorAppender"/>
        </logger>
    </springProfile>

    <springProfile name="prod">
        <logger name="com.study.demo" level="error" additivity="true">
            <!--<appender-ref ref="debugAppender"/>
            <appender-ref ref="infoAppender"/>-->
            <appender-ref ref="errorAppender"/>
        </logger>
    </springProfile>

    <!-- 在root下所有日誌打印info級別的 -->
    <root level="info">
        <appender-ref ref="consoleAppender"/>
    </root>

</configuration>

日誌打印時,只需要在要打印日誌的類上面註解@Slf4j(需要引入lombok的jar包),然後直接可以log.info(),log.debug().log.error()進行打印日誌。

切換環境時可以在maven打包處勾選要切換的環境,切換時注意事項:

1、勾選要切換的環境;

2、重新import一下maven;

3、maven clean一下;

4、啓動。

否則會報錯,啓動失敗,也可以用maven的命令啓動,然後加上要切的環境參數即可。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章