SpringBoot系列之集成logback實現日誌打印(篇二)

SpringBoot系列之集成logback實現日誌打印(篇二)html

基於上篇博客SpringBoot系列之集成logback實現日誌打印(篇一)以後,再寫一篇博客進行補充java

logback是一款開源的日誌框架,內核重寫了,是基於log4j基礎進行改良的。其官網爲http://logback.qos.ch/index.html,logback在性能上有很大提高,擁有更多特性。git

  • logback-core:是其它兩個模塊的基礎模塊
  • logback-classic:log4j的改良版本,實現了Slf4j API
  • logback-access:集成Servle環境時就須要logback了,能夠提供Http訪問的接口

簡單介紹一下日誌級別,按照從低到高排序:trace < debug < info < warn < error,eg:假如日誌級別爲info,則只會打印info級別及其高級別的日誌,因此在項目中,能夠經過調高日誌級別,打少點日誌,反之,想打多點就調低日誌級別github

SpringBoot支持的不一樣日誌系統的配置文件:web

Logging System Customization
Logback logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy
Log4j2 log4j2-spring.xml or log4j2.xml
JDK (Java Util Logging) logging.properties

從前面的學習,SpringBoot系列之日誌框架使用教程,咱們知道了SpringBoot默認集成的是logback的,因此本博客介紹一下logback自定義配置的基本用法spring

SpringBoot官方的建議也是推薦使用logback-spring.xml版本的sql

When possible, we recommend that you use the -spring variants for your logging configuration (for example, logback-spring.xml rather than logback.xml). If you use standard configuration locations, Spring cannot completely control log initialization.apache

緣由是爲何?咱們在官網往下翻,能夠發現:springboot

Because the standard logback.xml configuration file is loaded too early, you cannot use extensions in it. You need to either use logback-spring.xml or define a logging.config property.mybatis

翻譯過來就是大概意思就是logback.xml在SpringBoot啓動以前就被加載了,也就是ApplicationContext啓動以前就被加載了,很顯然,這樣是不能夠加載到SpringBoot的一下高級配置,而logback-spring.xml是支持的,好比在官網就列舉了以下兩種高級拓展配置,這兩種配置只能用logback-spring.xml纔是可使用的,logback.xml是不支持的

在這裏插入圖片描述

ok,profile-specific configuration指的就是多環境配置

<springProfile name="staging">
    <!-- configuration to be enabled when the "staging" profile is active -->
</springProfile>

<springProfile name="dev | staging">
    <!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile>

<springProfile name="!production">
    <!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>

例子,dev環境用一個日誌格式,非dev環境用另一種日誌格式
而後在application.properties,配置環境:spring.profiles.active= dev

<!-- 打印到控制檯 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 格式化日誌內容-->
        <encoder>
            <springProfile name="dev">
            <pattern>${LOG_PATTERN}</pattern>
            </springProfile>
            <springProfile name="!dev">
                <pattern>%d{yyyy-MM-dd HH24:mm:ss.SSS} {%thread} %-5level %logger{50} - %msg%n</pattern>
            </springProfile>
        </encoder>
    </appender>

ok,給出本身的logback-spring.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<configuration debug="false" scan="true">
    <!-- 日誌級別 -->
    <springProperty scope="context" name="LOG_ROOT_LEVEL" source="logging.level.root" defaultValue="DEBUG"/>
    <!--  標識這個"STDOUT" 將會添加到這個logger -->
    <springProperty scope="context" name="STDOUT" source="log.stdout" defaultValue="STDOUT"/>
    <!-- 日誌格式,%d:日期;%thread:線程名;%-5level:日誌級別從左顯示5個字符長度,列如:DEBUG;
        %logger{36}:java類名,例如:com.muses.taoshop.MyTest,36表示字符長度;%msg:日誌內容;%n:換行 -->
    <property name="LOG_PATTERN"
              value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
    <!-- root日誌級別-->
    <property name="${LOG_ROOT_LEVEL}" value="DEBUG" />
    <!-- 日誌跟目錄 -->
    <property name="LOG_HOME" value="data/logs" />
    <!-- 日誌文件路徑-->
    <property name="LOG_DIR" value="${LOG_HOME}/%d{yyyyMMdd}" />
    <!-- 日誌文件名稱 -->
    <property name="LOG_PREFIX" value="portal" />
    <!-- 日誌文件編碼 -->
    <property name="LOG_CHARSET" value="utf-8" />
    <!-- 配置日誌的滾動時間,保存時間爲15天-->
    <property name="MAX_HISTORY" value="15" />
    <!-- 文件大小,默認爲10MB-->
    <property name="MAX_FILE_SIZE" value="10" />


    <!-- 打印到控制檯 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- 格式化日誌內容-->
        <encoder>
            <springProfile name="dev">
            <pattern>${LOG_PATTERN}</pattern>
            </springProfile>
            <springProfile name="!dev">
                <pattern>%d{yyyy-MM-dd HH24:mm:ss.SSS} {%thread} %-5level %logger{50} - %msg%n</pattern>
            </springProfile>
        </encoder>
    </appender>
    <!-- 打印全部日誌,保存到文件-->
    <appender name="FILE_ALL"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/all_${LOG_PREFIX}.log</file>
        <!-- 設置滾動策略,當日志文件大小超過${MAX_FILE_SIZE}時,新的日誌內容寫到新的日誌文件-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 新的日誌文件路徑名稱,%d:日期 %i:i是變量 -->
            <fileNamePattern>${LOG_DIR}/all_${LOG_PREFIX}%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 保存日誌15天 -->
            <maxHistory>${MAX_HISTORY}</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 日誌文件的最大大小 -->
                <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!-- 格式日誌文件內容-->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>${LOG_PATTERN}</pattern>
        </layout>
    </appender>

    <!-- 打印錯誤日誌,保存到文件-->
    <appender name="FILE_ERR"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/err_${LOG_PREFIX}.log</file>
        <!-- 設置滾動策略,當日志文件大小超過${MAX_FILE_SIZE}時,新的日誌內容寫到新的日誌文件-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 新的日誌文件路徑名稱,%d:日期 %i:i是變量 -->
            <fileNamePattern>${LOG_DIR}/err_${LOG_PREFIX}%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 保存日誌15天 -->
            <maxHistory>${MAX_HISTORY}</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 日誌文件的最大大小 -->
                <maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <!-- 格式日誌文件內容-->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>${LOG_PATTERN}</pattern>
        </layout>
    </appender>

    <!-- rest template logger-->
    <logger name="org.springframework.web.client.RestTemplate" level="DEBUG" />
    <logger name="org.springframework" level="DEBUG" />

    <!-- jdbc-->
    <logger name="jdbc.sqltiming" level="DEBUG" />
    <logger name="org.mybatis" level="DEBUG" />

    <!-- zookeeper-->
    <logger name="org.apache.zookeeper"    level="ERROR"  />

    <!-- dubbo -->
    <logger name="com.alibaba.dubbo.monitor" level="ERROR"/>
    <logger name="com.alibaba.dubbo.remoting" level="ERROR" />

    <!-- 日誌輸出級別 -->
    <root leve="${LOG_ROOT_LEVEL}">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE_ALL" />
        <appender-ref ref="FILE_ERR" />
    </root>

</configuration>

附錄:
logging manual:SpringBoot日誌官方手冊
example source:日誌配置github代碼下載連接

相關文章
相關標籤/搜索