springboot2.x基礎教程:日志配置


項目的開發過程中,開發人員對於日志一定不會陌生。日志能夠記錄程序運行的軌跡,輸出軟件運行中的關鍵信息,輔助我們排查與定位問題,優化程序運行性能,監控程序運行狀態,不可不謂重要。
SpringBoot項目的spring-boot-starter默認引用spring-boot-starter-logging,其中底層采用logback日志框架,默認零配置即可使用日志記錄功能。
在講解springboot日志配置之前先簡單談談JAVA日志有關的基礎知識。

日志記錄的時機

  • 記錄程序初始化有關啟動的參數,判斷程序的運行狀態
  • 代碼拋出異常,記錄程序異常狀態
  • 業務流程與預期結果不符,記錄業務異常狀態
  • 系統核心業務,核心權限操作。比如登錄、付款等操作記錄,通常還會入庫分析。

Java日志框架

對於日志框架,我們通常會看到log4j、logback等名詞,也會遇到自己項目與第三方jar的日志庫沖突問題。
初次接觸這些,可能有種雲霧繚繞不知所雲的感覺,下面簡單介紹下Java日志框架的關系。更具體的歷史緣由,細節部分。網上有幾篇文章介紹的很好,給大家附上自行閱讀理解:

  1. 知乎上面有篇文章:java日志框架解析
  2. 博客上面有篇文章:Java常用日志框架介紹

看完以上文章簡單的總結Java日志框架分為3類:

  • Java日志框架的具體的實現:log4j1.x、JUL(Java Util Log)、Logback、log4j2-core
  • Java日志框架的門面對象,只提供接口不提供具體實現:JCL(Commons Logging)、SLF4J(The Simple Logging Facade for Java)、log4j2-api
  • Java日志框架之間的適配器,為了讓不同日志框架互相轉換:jcl-over-slf4j、slf4j-jcl、log4j-over-slf4j、slf4j-log4j12等等
    圖片來源網上

關於日志框架的最佳實踐(來源參考鏈接,這里只是摘出):

  1. 總是使用Log Facade,而不是具體Log Implementation
  2. 只添加一個 Log Implementation依賴
  3. 具體的日志實現依賴應該設置為optional和使用runtime scope
  4. 如果有必要, 排除依賴的第三方庫中的Log Impementation依賴
  5. 避免輸出不必要的日志,跟不必要的日志字段如行號影響程序性能

SpringBoot日志配置

日志依賴

springboot默認使用SLF4J+Logback的組合記錄日志,查看依賴可知,不用我們額外引入。

springboot日志配置

logging:
  level:
    #包的日志級別
    org.springframework.web: DEBUG
  #自定義log信息
  config: classpath:config/logback-spring.xml
  pattern:
    #控制台的日志輸出格式
    console: '%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n'
    #文件的日志輸出格式
    file: '%d{yyyy/MM/dd-HH:mm} [%thread] %-5level %logger- %msg%n'
  file:
    #日志名稱
    name: app.log
    #存儲的路徑
    path: /var/log/
    #存儲的最大值
    max-size: 50MB
    #保存時間
    max-history: 7

自定義的日志配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--獲取變量名中關於日志存儲的路徑與存儲名稱-->
    <springProperty scope="context" name="logPath" source="logging.file.path"/>
    <springProperty scope="context" name="logName" source="logging.file.name"/>
    <!--輸出到控制台的appender-->
    <appender name="Console"
              class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable
            </Pattern>
        </layout>
    </appender>
    <!--輸出到文件的appender-->
    <appender name="RollingFile"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logPath}/${logName}</file>
        <encoder
                class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
        </encoder>

        <rollingPolicy
                class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily and when the file reaches 10 MegaBytes -->
            <fileNamePattern>${LOGS}/archived/spring-boot-logger-%d{yyyy-MM-dd}.%i.log
            </fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>

    <!--開發環境基本級別為DEBUG-->
    <springProfile name="dev">
        <root level="DEBUG">
            <appender-ref ref="Console"/>
        </root>
    </springProfile>
    <!--生產環境輸入到文件中-->
    <springProfile name="prod">
        <root level="INFO">
            <appender-ref ref="RollingFile"/>
        </root>
    </springProfile>
</configuration>

千里之行,始於足下。這里是SpringBoot教程系列第八篇,所有項目源碼均可以在我的GitHub上面下載源碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM