最近纔開始在項目中使用logback,有一種相見恨晚的感受,由於它很輕易的知足了個人幾個需求:html
1. 配置簡單,易於上手java
2. 一個日誌文件中只能某一個級別的日誌app
3. 一個類中能夠指定多個不一樣的日誌,而且生成的每一個日誌文件中只包含其自己的內容工具
4. 能夠關閉或者打開某幾個包的日誌,而且能夠設置不一樣的包使用不一樣的日誌級別。spa
1、易用性.net
logback的易用性不用多講,只須要經過下面兩行就能夠在console中輸出日誌:debug
[java] view plaincopyprint?調試
- <pre name="code" class="html">Logger debugLogger = LoggerFactory.getLogger(MyClass.class);
- </pre>logger.info("This is a log");
程序運行時,logback會查找默認的配置文件logback.xml或者logback-test.xml文件,若是沒有找到它就會使用默認的配置,將日誌打印到console中。下面是一個簡單配置文件(http://logback.qos.ch/manual/configuration.html):日誌
[html] view plaincopyprint?code
- <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>
2、日誌級別限制
在多數的Log工具中,級別是能夠傳遞,例如若是指定了日誌輸出級別爲DEBUG,那麼INFO、ERROR級別的log也會出如今日誌文件。這種默認給程序的調試帶來了不少的麻煩。而在logback中能夠經過appender中的filter來嚴格限制日誌的輸出級別:
[html] view plaincopyprint?
- <filter class="ch.qos.logback.classic.filter.LevelFilter">
- <level>INFO</level>
- <onMatch>ACCEPT</onMatch>
- <onMismatch>DENY</onMismatch>
- </filter>
上面的設置中只會在文件中出現級別爲INFO的日誌內容。
3、同一個類中包含不一樣的日誌
有時候一個類中可能要求打印不一樣的日誌信息,例若有的用來調試,有的用來記錄程序運行中的某些參數的變化等等。這時候能夠經過下面的語句聲明不一樣的日誌:
[java] view plaincopyprint?
- Logger debugLogger = LoggerFactory.getLogger(MyClass.class);
- Logger monitorLogger = LoggerFactory.getLogger("monitor");
而後在配置文件中分別指定不一樣的輸出文件(debugLogger使用默認的配置):
[html] view plaincopyprint?
- <appender name="monitor" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <File>${log.dir}/monitor.log</File>
- <encoder>
- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} : %m%n</pattern>
- </encoder>
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- <level>INFO</level>
- </filter>
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <fileNamePattern>${log.dir}/sensitive.log.%d{yyyy-MM-dd}</fileNamePattern>
- </rollingPolicy>
- </appender>
- <logger name="monitor" additivity="false" level="INFO">
- <span style="white-space:pre"> </span><appender-ref ref="monitor" />
- <span style="white-space:pre"> </span></logger>
這裏經過設置additivity="false"禁止monitor裏的內容向上傳遞,不然會同時顯示在默認的日誌中。
4、精確控制日誌的應用範圍
在程序調試中,常常出現的狀況是:錯誤只在某一個或者幾個類或者包裏,因此只須要打開這幾個類或者包裏的DEBUG級別的log。在之前的項目,使用Spring和Hibernate時,一旦打開DEBUG級別的log,程序自己的debug信息就會被Spring和Hibernate的大量日誌淹沒,大大下降了調試的效率。而logback讓這一切變的簡單起來了:
[html] view plaincopyprint?
- <logger name="org" level="ERROR" />
這一行就將org包下面的全部日誌級別設爲了ERROR,不會再打擾咱們的DEBUG
![](http://static.javashuo.com/static/loading.gif)