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.做好良好的日誌輸出內容