在開發網站時最重要的事情就是你要記錄使用者的行為,
Why?
1.好的紀錄可以讓你快速的找到錯誤點
2.分析使用者行為
3.紀錄重要資料的維護
4.當公司有人竊取機密時,可以將紀錄有效的紀錄是哪個內鬼!!!!!
5.幫助找到程式的BUG
6.其他
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
如果你要使用Spring Boot提供的日誌功能的話
你可以在application.properties設置其 名稱 or路徑與輸出的級別
ex:
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日誌內,如下圖
常見的日誌系統有
1.Logback:
2.Log4j
3.SL4J
Spring-Boot建議使用帶有Spring的日誌系統,建議使用Logback
在src/main/resources底下建立logback.xml
在logback.xml的起始標籤為
ex:
<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>
<root>
:必須設定 -定義輸出級別<contextName>
:不是必要,設定於輸出別名使用<property>
:設置變數,我們可以使用${}取得property的value<appender>
:name屬性定義此appender名稱,可以使用多個appender,class則是要使用哪種方式做輸出
ex:
<loger>
:用來設定一個package內或一個class內,要輸出的級別控制(http://blog.csdn.net/hrbeuwhw/article/details/78637573 )
其實我認為也可以只使用log4j的配置就好...配置多真的要人命
如果你不需要將Log分的這麼細的話就使用log4j吧!!!
1.我們可以添加過濾器來控制我們要的內容
2.我們可以新增多個appender,輸出多個檔案將檔案分類
3.我們可以將檔案輸出到我們要的路徑
4.做好良好的日誌輸出內容