Springboot日志配置


Springboot日志配置

生產環境日志及預警 https://blog.csdn.net/weixin_41158378/article/details/110701328

1. SpringBoot 日志常用配置

日志常用配置項 默認值 說明
logging.file 日志輸出的文件
logging.level.ROOT info 設置日志的輸出級別
logging.level.* info 定義指定包的輸出級別
logging.config logback-spring.xml 日志的配置文件
# 日志輸出的地址:Spring Boot默認並沒有進行文件輸出,只在控制台中進行了打印
logging.file=/home/zhou
# 日志級別 debug-> info -> warning -> error
# 默認級別為 info
# 如果設置了debug=true的時候,日志級別會自動降低為debug

# ROOT代表默認全局設置
logging.level.ROOT=INFO
# 可以設置指定包的輸出級別,這樣的話,指定的包,級別以下的日志就不在打印或者寫入日志文件
logging.level.org.springframework=ERROR
logging.level.org.apache=ERROR

logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!--定義日志文件的存儲地址 勿在 LogBack 的配置中使用相對路徑-->
    <property name="LOG_HOME" value="D:/log" />
    <!-- 控制台輸出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--按pattern指定的路徑格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符,編碼為UTF-8-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!-- 定義一個日滾動(每天生成一份)的日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件輸出的文件名-->
            <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天數-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符,編碼為UTF-8-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
        <!-- 在日滾動文件中,強制只保存錯誤INFO級別以上的信息 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>

        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <!-- 定義日志全局最低輸出級別,同時向控制台和日滾動文件輸出 -->
    <root level="INFO">
        <appender-ref ref="console" />
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

想要自定義文件名的可在配置文件中添加logging.config配置

logging.config=classpath:loggging-dev.xml

2. 選擇合適的日志打印級別

  • trace:更加具體的調試信息,例如調試用了什么方法,參數是什么,可以用trace

  • debug:在項目開發階段,調試程序的正確性,可以使用debug

  • info:正常的業務執行流程,系統的啟動/關閉,需要做的審計等都可以使用info

  • warn:不是錯誤,不會影響程序的正常執行,但是不建議這么做,可以用warn

  • error:程序出現某種錯誤,需要介入處理

3. 合理日志記錄,需要遵守的原則

  • 搞清楚當前工程的日志級別(開發、測試還是生產環境),保證日志可以被打印

  • 使用參數化形式{}占位,[]進行參數隔離

  • 日志文件的名稱應該是可以自解釋的,通常至少會要求名稱中包含類型標識和時間標識

  • 日志要有滾動策略,這是考慮到避免單個文件過大,以及磁盤占用問題

    讓你的日志有意義且不冗余

  1. HTTP請求和遠程接口調用(HTTP或RPA)時,需要打印請求的入參和結果,如果入參和結果參數都很大,只需要打印核心的參數和結果(logging.info)

  2. 程序異常的原因(logging.error)

  3. 特殊的條件分支

    需要規避的日志打印過程

  4. 以下場景不應該打日志

    • 大數據日志 空間的浪費,可以使用trace或debug,避免生產環境出現這樣的大數據日志
    • 在循環中打日志,特別是大循環 排查問題困難
    • 沒有意義的日志,對於系統維護沒有幫助
    • 如果日志什么都說明不了,那一定要考慮修改或刪除這條日志,混淆視聽
    • 密碼,郵箱,手機號碼屬於私密信息,為了避免數據泄露,不應該打,數據泄露

日志能夠對業務邏輯進行解釋

  1. 日志應該包含哪些元素

    日志級別、日志內容、日志時間、線程名稱、類方法名 (行號、異常堆棧:可有可無)


免責聲明!

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



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