java日誌框架系列(3):logback框架配置詳解

1.Logback配置

1.配置步驟及默認配置

logback便可以經過編程式配置,也能夠經過xml的形式配置。web

logback配置步驟:spring

1. 嘗試在 classpath 下查找文件 logback-test.xml;
2. 若是文件不存在,則查找文件 logback.xml;
3. 若是兩個文件都不存在,logback 用 BasicConfigurator 自動對本身進行配置(默認配置),這會致使記錄輸出到控制檯。
 
注意:當配置文件 logback-test.xml 和 logback.xml 都不存在,那麼 logback 默認地會調用BasicConfigurator , 創 建一 個 最小 化配 置 。 最 小化 配置 由 一個 關聯 到 根 logger 的ConsoleAppender 組成。輸出用模式爲%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}- %msg%n 的 PatternLayoutEncoder 進行格式化。還有,根 logger 默認級別是 DEBUG。

2.xml文件進行配置

 在此經過xml文件建立一個上一小節中最小化配置,並將xml文件放到classpath中,代碼以下:編程

<configuration> 
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">   <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>     </encoder>   </appender>
  <root level="debug">
    <appender-ref ref="STDOUT" />   </root> </configuration>

3.自動打印警告和錯誤消息

 

 

示例:打印logback的內部信息狀態瀏覽器

 1 package logback;  2 import org.slf4j.Logger;  3 import org.slf4j.LoggerFactory;  4 import ch.qos.logback.classic.LoggerContext;  5 import ch.qos.logback.core.util.StatusPrinter;  6 public class Demo2 {  7     private static Logger logger=LoggerFactory.getLogger(Demo2.class);  8     public static void main(String[] args) {  9         // TODO Auto-generated method stub 10         //得到logback的logger上下文
11         LoggerContext context=(LoggerContext) LoggerFactory.getILoggerFactory(); 12         //打印內部的日誌:context找配置文件的過程,以及最終的配置
13  StatusPrinter.print(context); 14         logger.info("enter application."); 15         //Foo foo=new Foo(); 16         //foo.doIt();
17         logger.info("exit application."); 18  } 19 }

若是一切順利的話,控制檯會輸出如下內容:app

14:17:33,156 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml] 14:17:33,157 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy] 14:17:33,157 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/E:/code/myeclipse_workspace/spring_heima_video/logback/bin/logback.xml] 14:17:33,237 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set 14:17:33,237 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender] 14:17:33,246 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT] 14:17:33,252 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property 14:17:33,310 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG 14:17:33,310 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT] 14:17:33,311 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration. 14:17:33,312 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@198e2867 - Registering current configuration as safe fallback point 14:17:33.318 [main] INFO  logback.Demo2 -enter application. 14:17:33.321 [main] INFO  logback.Demo2 -exit application.

總結一下:在代碼中能夠經過ch.qos.logback.core.util.StatusPrinter對象方便的得到logback框架內部的狀態。在配置文件中一樣能夠達到得到logback框架內部狀態的這種效果,方法是設置configuration標籤的debug屬性爲true;請注意debug屬性只與狀態數據有關,它不影響logback的配置,更不會影響記錄級別框架

注意eclipse

把 configuration 元素的 debug 屬性設爲 true 後,會輸出狀態信息,可是 前提是:
1. 找到了配置文件;
2. 配置文件是格式化良好的 XML。
若是其中任一條件未知足,Joran 就會由於配置文件不可讀而沒法讀取 debug 屬性。若是找到了配置文件,但卻不是格式化良好的,那麼 logback 會檢測出錯誤並把內部狀態打印到控制檯。然而,若是找不到配置文件,因爲這不是個嚴重的錯誤,logback 不會自動打印狀態數據。

 4.配置文件修改後自動從新加載

若是設置成自動從新加載,logback-classic 會掃描配置文件裏的變化,而且當發生變化後進行從新配置。設置 方法是設 configuration 元素的 scan 屬性爲 true

注意:內部實現是這樣的,當設置掃描屬性爲 true 時,會安裝一個叫 ReconfigureOnChangeFilter的 TurboFilter。每次調用 logger 的打印方法時,都會進行掃描。ide

好比,當名爲 myLogger 的logger 執行「myLogger.debug("hello");」時,若是scan屬性爲true,則ReconfigureOnChangeFilter會被調用。並且,即便 myLogger 的 debug 級別被禁用了,仍然會調用上述過濾器。url

 5.直接調用JoranConfigurator

Logback 依賴 Joran, Joran 是 logback-core 的一部分,是個配置類庫Logback 的默認配置機制是調用JoranConfigurator 對classpath上的默認配置文件進行處理。無論出於什麼理由,若是你想從新實現 logback 的默認配置機制的話,你能夠直接調用 JoranConfigurator。

6.查看狀態消息

Logback 把內部數據放在一個 StatusManager 對象裏,並經過 LoggerContext 訪問
StatusManager 經過 logback 上下文來訪問全部數據對象。爲把內存佔用保持在合理的範圍內,默認的 StatusManager 實現將狀態消息按頭和尾兩部分存儲。頭部存儲開始的 H 條狀態消息,尾部存儲後面的 T 條消息。如今的 H=T=150,未來或許會改變。

 

 要想在web程序中實現上述功能,能夠在WEB-INF/web.xml中添加以下內容:spa

<servlet>
    <servlet-name>ViewStatusMessages</servlet-name> 
  <servlet-class>ch.qos.logback.classic.ViewStatusMessagesServlet</servlet-class> </servlet>
<servlet-mapping>
  <servlet-name>ViewStatusMessages</servlet-name>
  <url-pattern>/lbClassicStatus</url-pattern> </servlet-mapping>

經過瀏覽器查看錶格形式的logback內部狀態信息的網址爲:http://host/yourWebapp/lbClassicStatus。

7.監聽狀態消息

你也 能夠爲 StatusManager 附加一個 StatusListener,這樣就能當即對狀態消息做出響應,尤爲對那些 logback 配置完成以後的消息。 註冊一個狀態監聽器能夠方便地實現對 logback內部狀態的無人監管
 
logback有一個名稱爲 OnConsoleStatusListenerStatusListener接口實現,能夠把狀態消息打印到控制檯。

1.爲StatusManager註冊StatusListener監聽器

 
實例1:演示如何爲StatusManager註冊一個OnConsoleStatusListener實例。
注意:註冊了的狀態監聽器只會接收被註冊以後的狀態消息,不會接收註冊以前的消息。

2.xml方式註冊狀態監聽器

<configuration> 
  <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />   ... the rest of the configuration file </configuration>

經過xml配置文件註冊狀態監聽器,方法是在configuration標籤中添加子標籤statusListener,並指定實現類。

相關文章
相關標籤/搜索