此處主要介紹maven web工程下如何使用 logback + slf4j 進行日誌記錄。html
logback主要包含三個組成部分:Loggers(日誌記錄器)、Appenders(輸出目的在)、Layouts(日誌輸出格式)java
slf4j :如jdbc同樣,定義了一套接口,是一個日誌門面,可實現多個日誌系統間快速切換(經過修改配置文件)web
logback : 和log4j是同一做者,是log4j的升級版,效果可想而知.spring
logback 主要分爲三個模塊,分別是:編程
logback-core:提供基礎功能,是其餘兩個模塊的基礎
logback-classic : log4j的升級,實現了self4j api
logback-access:用於與sevlet容器進行集成、提供網絡訪問日誌的功能api
logback初始化時,默認會去classpath下依次加載以下配置文件(logback.groovy、logback-test.xml、logback.xml),當找不到配置文件時logback將爲rootLogger 添加一個 ConsoleAppender ,用於將日誌輸出到控制檯。對於logback的初始化,官網有以下描述瀏覽器
Logback tries to find a file called logback.groovy in the classpath. If no such file is found, logback tries to find a file called logback-test.xml in the classpath. If no such file is found, it checks for the file logback.xml in the classpath.. If no such file is found, service-provider loading facility (introduced in JDK 1.6) is used to resolve the implementation of com.qos.logback.classic.spi.Configurator interface by looking up the file META-INF\services\ch.qos.logback.classic.spi.Configurator in the class path. Its contents should specify the fully qualified class name of the desired Configurator implementation. If none of the above succeeds, logback configures itself automatically using the BasicConfigurator which will cause logging output to be directed to the console.
編程時但是要以下代碼查看logback內部運行狀況:網絡
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
StatusPrinter.print(lc);
對於web項目,可配置sevlet,而後經過網頁查看logback內部運行狀態,以下:app
<!-- 經過瀏覽器以html形式查看logback內部狀態 :http://host/yourWebapp/lbClassicStatus --> <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>
說了一大堆廢話,如今開始進入主題:maven
首先,在pom文件引入相關依賴,以下:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.0.13</version> </dependency>
接着,編寫logback.xml(位於classpath目錄下,此處爲src/main/resources目錄)
最後,就能夠在程序中使用logback了,例如:
package com.yinz.aaa;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Test { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(Test.class); logger.debug("test........"); } }
如上所述,咱們使用的slf4j中的api,如此依賴,要想在多個日誌系統間切換,只須要提供相應的配置文件就能夠了,而不須要修改編碼部分。
最後有幾點須要注意:
一、logger 的日誌級別若沒顯示定義,則繼承最近的祖先logger(該logger需顯示定義level,直到rootLogger)的日誌級別。
1.1,、logger的父子關係,由logger的名稱決定,例若有三個logger,分別爲:java.lang.util 、 java.lang 、java
則,java是java.lang的父logger, 是java.lang.util的祖先logger. 而同時java.lang是java.lang.util的父logger
二、logger的appender默認具備累加性(默認日誌輸出到當前logger的appender和全部祖先logger的appender中),可經過配置 「additivity」屬性修改默認行爲
logback與spring整合還在研究中。。。。。。