Spring Boot如何實現日誌記錄SLF4J
Spring Boot如何實現日誌記錄SLF4J?下面本站小編帶大家一起來看看詳細內容,希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網!
在開發中打印內容,使用 tln() 和 Log4j 應當是人人皆知的方法了。
其實在開發中我們不建議使用 因為大量的使用 會增加資源的消耗。
而Log4j 更為靈活在性能上也相比 要高,我們可以配置輸出級別,可以指定多個日誌文件分別記錄不同的日誌。
使用 是在當前線程執行的,寫入文件也是寫入完畢後才繼續執行下面的程序。而使用Log工具不但可以控制日誌是否輸出,怎麼輸出,它的處理機制也是通知寫日誌,繼續執行後面的代碼不必等日誌寫完。
如非必要,建議大家不要使用控制枱輸出,因為控制枱輸出沒有優先級會顯得輸出太亂。
個人推薦使用 SLF4J(Simple Logging Facade For Java)的logback來輸出日誌,其比log4j 要好,因為他效率更高。
spring Boot 提供了一套日誌系統,logback是最優先的選擇。配置了可以利用Spring Boot提供的默認日誌配置:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/"/>
<logger name="" level="DEBUG"/>
</configuration>
這樣就定義了一個 捕獲 的日誌,日誌級別是 DEBUG,上面引用的 文件內容為:
<?xml version="1.0" encoding="UTF-8"?>
<!--
Base logback configuration provided for compatibility with Spring Boot 1.1
-->
<included>
<include resource="org/springframework/boot/logging/logback/" />
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${ir:-/tmp}}/}}"/>
<include resource="org/springframework/boot/logging/logback/" />
<include resource="org/springframework/boot/logging/logback/" />
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</included>
Spring Boot的日誌系統預先定義了一些系統變量:
PID,當前進程ID{LOG_FILE},Spring Boot配置文件(erties|)中的值
${LOG_PATH}, Spring Boot配置文件中的值
同時默認情況下包含另個appender——一個是控制枱,一個是文件,分別定義在和中。同時對於應用的日誌級別也可以通過erties進行定義:
=DEBUG
le=TRACE
這樣相當於我們在 中配置的對應的日誌級別。名稱以l開頭,後面跟要輸入日誌的包名。
如果在 和 erties 中定義了相同的配置(如都配置了 )但是輸出級別不同,則實際上 erties 的優先級高於 *
我們既然使用了maven來管理項目,我們就可以根據不同環境來定義不同的日誌輸出,在 中使用 springProfile 節點來定義,方法如下:
注意文件名稱不是,想使用spring擴展profile支持,要以命名
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/" />
<logger name="" level="INFO"/>
<logger name="le" level="TRACE" />
<springProfile name="dev">
<logger name="le" level="DEBUG" />
</springProfile>
<springProfile name="staging">
<logger name="le" level="INFO" />
</springProfile>
</configuration>
如上我們默認為 le 定義了TRACE級別的輸出,下面又定義兩個 springProfile ,分別是 dev 和 staging,輸出級別分別是 DEBUG 和 INFO
我們可以啟動服務的時候指定 profile (如不指定使用默認),如指定staging 的方式為:
java -jar ve=staging
下面介紹兩種常用的'Appender
ConsoleAppender
Logback使用appender來定義日誌輸出,在開發過程中最常用的是將日誌輸出到控制枱:
<appender name="consoleAppender" class="oleAppender">
<encoder>
<Pattern>.%d{HH:mm:} [%thread] %-5level %logger{36} - %msg %n</Pattern>
</encoder>
<filter class="sholdFilter">
<level>TRACE</level>
</filter>
</appender>
表示對日誌進行編碼
%d{HH:mm:}——日誌輸出時間
%thread——輸出日誌的進程名字,這在Web應用以及異步任務處理中很有用
%-5level——日誌級別,並且使用5個字符靠左對齊
%logger{36}——日誌輸出者的名字
%msg——日誌消息
%n——平台的換行符
在這種格式下一條日誌的輸出結果如下:
10:12:51.012 [threadName] DEBUG ingResponseFilter
RollingFileAppender
另一種常見的日誌輸出到文件,隨着應用的運行時間越來越長,日誌也會增長的越來越多,將他們輸出到同一個文件並非一個好辦法。RollingFileAppender用於切分文件日誌:
<appender name="dailyRollingFileAppender" class="ingFileAppender">
<File>/data/log/</File>
<rollingPolicy class="BasedRollingPolicy">
<!-- daily rollover -->
<FileNamePattern>rest-demo.%d{yyyy-MM-dd}</FileNamePattern>
<!-- keep 30 days' worth of history -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<Pattern>%d{HH:mm:} [%thread] %-5level %logger{35} - %msg %n</Pattern>
</encoder>
</appender>
其中重要的是rollingPolicy的定義,上例中rest-demo.%d{yyyy-MM-dd}定義了日誌的切分方式——把每一天的日誌歸檔到一個文件中,30表示只保留最近30天的日誌,以防止日誌填滿整個磁盤空間。同理,可以使用%d{yyyy-MM-dd_HH-mm}來定義精確到分的日誌切分方式。
Sentry
Sentry是一個統一的日誌跟蹤平台,在傳統的日誌管理中,都是在服務器上通過tail, vim等工具查看日誌,並且不同的日誌位置也個不相同,而Sentry則是將這些日誌(主要是錯誤日誌)通過統一的接口收集起來,並且提供跟蹤、管理的功能,使得應用程序的錯誤、Bug能夠即時被解決。
Sentry提供了Java庫——Raven Java,Java應用程序能夠在捕獲異常後將其發送到Sentry服務器中,另一方面它包含了各類日誌框架的支持,以Logbakc為例:
<dependency>
<groupId>n</groupId>
<artifactId>raven-logback</artifactId>
<version>6.0.0</version>
</dependency>
在中定義appender:
<configuration>
<appender name="Sentry" class="ryAppender">
<dsn>https://publicKey:secretKey@host:port/1?options</dsn>
<tags>tag1:value1,tag2:value2</tags>
<!-- Optional, allows to select the ravenFactory -->
<!--<ravenFactory>ultRavenFactory</ravenFactory>-->
</appender>
<root level="warn">
<appender-ref ref="Sentry"/>
</root>
</configuration>
我們推薦在這個中加入用於過濾 ERROR 級別的日誌。
總結
在Spring Boot 中記錄日誌只需兩步:
1、在 src/main/resources 下面創建 文件,並按上面講述的進行配置。
或者使用最簡單的方法在 application 配置文件中配置。
2、在Java代碼中創建實例,並在需要輸出日誌的地方使用。
// 在Java類中創建 logger 實例
private static final Logger logger = ogger(s);
// 在方法中使用日誌輸出,如
public void logTest() {
g("日誌輸出測試 Debug");
e("日誌輸出測試 Trace");
("日誌輸出測試 Info");
}
-
Java 正則表達式
Java是一門編程語言,那麼大家知道Java正則表達式是怎樣的呢?下面一起來看看!Java正則表達式正則表達式定義了字符串的模式。正則表達式可以用來搜索、編輯或處理文本。正則表達式並不僅限於某一種語言,但是在每種語言中有細微的差別。正則表達式實例一個字符串其...
-
java語言的接口與繼承
Java是一個面向對象的語言。對程序員來説,這意味着要注意應中的數據和操縱數據的方法,而不是嚴格地用過程來思考。下面是小編分享的java語言的接口與繼承,一起來看一下吧。大多數人認為,接口的意義在於頂替多重繼承。眾所周知Java沒有c++那樣多重繼承的機制,但是卻...
-
如何實現javascript去除字符串裏中文與空格
導語:如何實現javascript去除字符串裏中文與空格呢?下面是小編給大家提供的示例代碼實現,大家可以參考閲讀,更多詳情請關注應屆畢業生考試網。1.去掉空格:functionmoveSpace(){varstr="abcdefg";alert(ace(/[]/g,""));}moveSpace();2.去掉中文:vartitle="字符串zifuc...
-
如何在Javascript中為String對象添加trim,ltrim,rtrim方法
如何在Javascript中為String對象添加trim,ltrim,rtrim方法呢?下面是小編給大家提供的實現代碼,大家可以參考閲讀,更多詳情請關注應屆畢業生考試網。利用Javascript中每個對象(Object)的prototype屬性我們可以為Javascript中的內置對象添加我們自己的方法和屬性。j...
相關文章
- Why Public Speaking Is So Important 公共演説的重要性大學英語
- Diaspora Finance Powers Global Development美文欣賞
- 英語作文閲讀解析:Following in hero’s footsteps
- JavaScript如何實現JSON.stringify
- The Spirit of Two Broke Girls英語作文
- Food and place of interest in Beijing國中英語作文
- 英語閲讀:Feelings of joy and thoughts from joy
- Urban Food Foraging Looks Fruitful美文欣賞
- whats your plan for dragon boat festival英語作文
- Spring Boot使用slf4j+logback記錄日誌配置詳解