007_logback配置
?
1. Logback采取下面的步驟進行自我配置
1.1. 嘗試在classpath下查找文件logback-test.xml;
1.2. 嘗試在classpath下查找文件logback.groovy;
1.3. 嘗試在classpath下查找文件logback.xml;
1.4. 假設配置文件logback-test.xml、logback.groovy和logback.xml都不存在, 那么logback默認地會調用BasicConfigurator, 創建一個最小化配置。最小化配置由一個關聯到根logger的ConsoleAppender組成。輸出用模式為%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n的PatternLayoutEncoder進行格式化。還有, 根logger默認級別是DEBUG。最后一步是為了在缺少配置文件時提供默認(但基本的)記錄功能。
2. 默認配置例子
2.1. 新建一個名為DefaultCfg的Java項目, 同時添加相關jar包。
2.2. DefaultCfg.java
package com.fj.cfg;import org.slf4j.Logger; import org.slf4j.LoggerFactory;public class DefaultCfg {private static final Logger logger = LoggerFactory.getLogger(DefaultCfg.class);public static void main(String[] args) {logger.error("沒有logback-test.xml配置");logger.warn("沒有logback.groovy配置");logger.info("沒有logback.xml配置");logger.debug("logback默認地調用BasicConfigurator, 創建一個最小化配置。");logger.trace("這條日志使用默認配置的默認級別不會被打印。");} }2.3. 運行項目
3. 用logback-test.xml或logback.xml自動配置?
3.1. 如果classpath里有logback-test.xml或logback.xml, logback會試圖用它進行自我配置。下面的配置文件與沒有配置文件時, 默認調用BasicConfigurator創建最小化配置是等效的。
<configuration><appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> <encoder charset="UTF-8"> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root><appender-ref ref="stdout" /></root> </configuration>4. 配置打印內部信息
4.1. 設置configuration元素的debug屬性為true, 會打印logback狀態數據。
4.2. 新建一個名稱為LogbackCfg的Java項目, 添加相關jar包
4.3. 新建一個名為config的source folder, 在config文件夾下創建logback-test.xml配置文件
4.4. 編輯logback-test.xml
<configuration debug="true"><appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> <encoder charset="UTF-8"> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root><appender-ref ref="stdout" /></root> </configuration>4.5. 編寫PrintStatusByCfg.java
package com.zr.cfg;import org.slf4j.Logger; import org.slf4j.LoggerFactory;public class PrintStatusByCfg {private final static Logger logger = LoggerFactory.getLogger(PrintStatusByCfg.class);public static void main(String[] args) {logger.info("configuration debug = true時, 會打印內部信息。");} }4.6. 運行項目
5. 配置文件修改后自動重新加載
5.1. 如果設置成自動重新加載, logback-classic會掃描配置文件里的變化, 并且當發生變化后進行重新配置。設置訪方法是設configuration元素的scan屬性為true。
<configuration scan="true">... </configuration5.2. 默認情況下, 每隔一分鐘掃描一次。 configuration元素的scanPeriod屬性控制掃描周期, 其值可以帶時間單位, 包括: milliseconds、seconds、minutes和hours。
<configuration scan="true" scanPeriod="30 seconds">... </configuration>5.3. 如果沒寫明時間單位, 則默認為毫秒。
5.4. 內部實現是這樣的, 當設置掃描屬性為true時, 會安裝一個叫ReconfigureOnChangeFilter的TurboFilter。每次調用logger的打印方法時, 都會進行掃描。比如, 當名為myLogger的logger執行"myLogger.debug("hello");"時, 如果scan屬性為true, 則ReconfigureOnChangeFilter會被調用。而且, 即使myLogger的debug級別被禁用了, 仍然會調用上述過濾器。
5.5. 考慮到在任何logger在每次被調用時都要調用ReconfigureOnChangeFilter, 這個過濾器的性能就變得十分關鍵了。為提高性能, 不會在每個logger被調用時去檢查是否需要掃描, 而是每隔16次記錄操作進行一次檢查。簡言之, 當配置文件改變后, 它會被延時重新加載, 延時時間由掃描間隔時間和一些logger調用所決定。
6. 直接調用JoranConfigurator
6.1. Logback依賴Joran, Joran是logback-core的一部分, 是個配置類庫。Logback的默認配置機制是調用JoranConfigurator對classpath上的默認配置文件進行處理。不管出于什么理由, 如果你想重新實現logback的默認配置機制的話, 你可以直接調用JoranConfigurator。
6.2. 創建一個名為的Java項目, 同時添加相關jar包
6.3. 新建cfg文件夾, 在cfg下創建logback.xml
6.4. 編輯logback.xml
<configuration><appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> <encoder charset="UTF-8"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root><appender-ref ref="stdout" /></root> </configuration>6.5. 編輯CodeUseCfg.java
package com.zr.cfg;import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.joran.JoranConfigurator; import ch.qos.logback.core.joran.spi.JoranException;public class CodeUseCfg {private static final Logger logger = LoggerFactory.getLogger(CodeUseCfg.class);public static void main(String[] args) {// 上下文LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();// Joran配置文件處理類JoranConfigurator cfg = new JoranConfigurator();cfg.setContext(lc);// 上下文已經讀取配置文件或使用默認配置文件, 這里進行重置操作。lc.reset();try {cfg.doConfigure("cfg/logback.xml");} catch (JoranException e) {e.printStackTrace();}logger.info("使用代碼設置配置文件");} }6.6. 運行結果
7. html查看狀態消息
7.1. Logback把內部數據放在一個StatusManager對象里,并通過LoggerContext訪問。
7.2. StatusManager通過logback上下文來訪問所有數據對象。為把內存占用保持在合理的范圍內,默認的StatusManager實現將狀態消息按頭和尾兩部分存儲。頭部存儲開始的H條狀態消息,尾部存儲后面的T條消息。現在的H=T=150,將來或許會改變。
7.3. Logback-classic帶了一個叫ViewStatusMessagesServlet的Servlet,它以HTML表格的格式打印與當前LoggerContext關聯的StatusManager的內容。
7.4. 新建一個名為ViewStatusMessagesServlet的動態Web工程, 同時添加相關jar包
7.5. 在web.xml里配置servlet
7.6. 發送請求
總結
以上是生活随笔為你收集整理的007_logback配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 006_logback体系结构
- 下一篇: 016_logback中的Encoder