相关文章推荐
儒雅的皮带  ·  Ubuntu20.04 ...·  1 月前    · 
耍酷的木瓜  ·  Docker Nginx stopped: ...·  1 年前    · 
礼貌的皮带  ·  使用 Visual Studio 创建 ...·  1 年前    · 

Log是網站非常重要的功能之一了,在現今的平台上,不論是對外的使用者,還是對內企業管理,我們往往都會遇到
許多Bug或是錯誤在某一天的就發生了,當你的紀錄都在伺服器預設的檔案內,要查閱紀錄根本就是大海撈針
所以我們這篇來分享一下如何使用Spring Boot建置日誌功能

不需要添加依賴

在Spring-Boot-Starter內已經有了spring-boot-starter-logging,他是Spring Boot默認的日誌Jar

輸出的層級

在傳統的log4j裡,日誌總共有分為
1.TRACE
2.DEBUG
3.INFO
4.WARN
5.ERROR
6.FATAL

日誌管理上是有權限的高低,就如同伺服器的Log也有權限高低的配置一樣,他們的高低順序為
TRACE < DEBUG < INFO < WARN < ERROR < FATAL

application.properties

如果你要使用Spring Boot提供的日誌功能的話
你可以在application.properties設置其 名稱 or路徑與輸出的級別
logging.file = "logName.log" #絕對路徑,會在你的專案內新增一個名稱為logName.log檔案
你也可以自訂log路徑
logging.path = "filePath.log" #相對路徑,會在路徑內新增一個filePath.log檔案

註:logging.file屬性與logging.path屬性不能同時使用,只能設定一種

如果你只想紀錄ERROR與FATAL級別的話,你可以自訂要輸出的級別
logging.level.root =ERROR

以INFO級別為例子,成功輸出後,CONSOLE主控台輸出的結果將會存入我們的log日誌內,如下圖

Spring日誌介紹

常見的日誌系統有
1.Logback:

  • 常見配置檔名稱:logback-spring.xml, logback-spring.groovy, logback.xml
  • 2.Log4j

  • 常見配置檔名稱:log4j-spring.properties,log4j.properties
  • 3.SL4J

  • 常見配置檔名稱:log4j.properties(與log4j)相同
  • Spring-Boot建議使用帶有Spring的日誌系統,建議使用Logback

    建立logback.xml

    在src/main/resources底下建立logback.xml

    在logback.xml的起始標籤為

    <configuration scan="true" scanPeriod="60 seconds" debug="false">
    

    scan屬性為true時:當配置文件被改變將回重新載入
    scanPeriod:監測文件是否有修改的時間間隔
    debug:設定為true將會把logback運作輸出在控制台,一般設定為false

    我的配置檔

    <configuration scan="true" scanPeriod="60 seconds" debug="false">
    <contextName>logback-test</contextName>
    <property name="logback.dir" value="C:/Users/User/SpringTutorial/tutorial2"/>
    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
    過濾器設定
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
    <!-- 過濾 ERROR -->
    <!-- <level>ERROR</level> -->
    <!-- 遇到ERROR就過濾 -->
    <!-- <onMatch>DENY</onMatch> -->
    <!-- 没有匹配到就新增 -->
    <!-- <onMismatch>ACCEPT</onMismatch> -->
    <!-- </filter> -->
      日誌名稱,如果没有File 属性,默認使用FileNamePattern的文件路徑
        如果同時有<File>和<FileNamePattern>,默認當天日誌是<File>
    <File>info.log</File>
    <!-- 滾動日誌,按照時間滾動 TimeBasedRollingPolicy -->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <!-- 文件路徑,定義日誌一天產生一筆 相關屬性可以在參閱文件做設定 -->
    <FileNamePattern>error.log.%d{yyyy-MM-dd}.log</FileNamePattern>
    <!-- 設定保留日誌天數 -->
    <maxHistory>30</maxHistory>
    <!-- 設定日誌的容量上限,超過則會清除 -->
    <!-- <totalSizeCap>1GB</totalSizeCap> -->
    </rollingPolicy>
    <!-- 日誌輸出的編碼方式 ,中文就使用UTF8 -->
    <encoder>
    <charset>UTF-8</charset>
    <pattern>%d [%thread] %-5level %logger{36} %line - %msg%n</pattern>
    </encoder>
    </appender>
    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
    過濾器,默認為 info 级别的,ThresholdFilter
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
    <level>Error</level>
    </filter>
    <!--日誌名稱-->
    <File>${logback.logdir}/error.${logback.appname}.log</File>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <FileNamePattern>
    ${logback.logdir}/error.${logback.appname}.%d{yyyy-MM-dd}.log
    </FileNamePattern>
    <maxHistory>90</maxHistory>
    </rollingPolicy>
    <!-- 日誌輸出編碼 -->
    <encoder>
    <charset>UTF-8</charset>
    <pattern>%d [%thread] %-5level %logger{36} %line - %msg%n</pattern>
    </encoder>
    </appender>
    <root level="info">
    <appender-ref ref="fileInfoLog"/>
    <appender-ref ref="fileErrorLog"/>
    </root>
    </configuration>
    

    logback標籤介紹

    <root>:必須設定 -定義輸出級別
    <contextName>:不是必要,設定於輸出別名使用
    <property>:設置變數,我們可以使用${}取得property的value
    <appender>:name屬性定義此appender名稱,可以使用多個appender,class則是要使用哪種方式做輸出

  • ch.qos.logback.core.ConsoleAppender:輸出於主控台
  • ch.qos.logback.core.rolling.RollingFileAppender:輸出於文件,使用Rolling滾動策略
    <loger>:用來設定一個package內或一個class內,要輸出的級別控制
  • 參考資料:

    (http://blog.csdn.net/hrbeuwhw/article/details/78637573 )

    其實我認為也可以只使用log4j的配置就好...配置多真的要人命
    如果你不需要將Log分的這麼細的話就使用log4j吧!!!

    1.我們可以添加過濾器來控制我們要的內容
    2.我們可以新增多個appender,輸出多個檔案將檔案分類
    3.我們可以將檔案輸出到我們要的路徑
    4.做好良好的日誌輸出內容