1. 程式人生 > >log4j配置和springboot中Logback配置

log4j配置和springboot中Logback配置

log4j

1. 導包

log4j下載地址

2. 配置檔案

預設配置檔案在src目錄下,個人感覺用properties還是比較爽的,在src下新建log4j.properties檔案

注:日誌級別

(debug < info < warn < error)

#設定
log4j.rootLogger = debug,stout,D,E

輸出資訊到控制檯

log4j.appender.stout = org.apache.log4j.ConsoleAppender
log4j.appender.stout.Target = System.out
log4j.appender.stout.layout = org.apache.log4j.PatternLayout

#日期格式

log4j.appender.stout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

輸出DEBUG 級別以上的日誌到 d:/logs/error.log

log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = d:/logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

輸出ERROR 級別以上的日誌到 d:/logs/error.log

log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =d:/logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

3. 測試程式

import org.apache.log4j.Logger;
public class TestLog {
 private static Logger logger = Logger.getLogger(TestLog.class); 
 /** 
 * @param args 
 */
 public static void main(String[] args) { 
 // System.out.println("This is println message."); 
 // 記錄debug級別的資訊 
 logger.debug("This is debug message."); 
 // 記錄info級別的資訊 
 logger.info("This is info message."); 
 // 記錄error級別的資訊 
 logger.error("This is error message."); 
 } 
}

此時就可以在控制檯看到資訊了,同時可以到d盤,log資料夾下檢視日誌檔案

基本語法

Log4j由三個重要的元件構成:日誌資訊的優先順序,日誌資訊的輸出目的地,日誌資訊的輸出格式。日誌資訊的優先順序從高到低有ERROR、WARN、 INFO、DEBUG,分別用來指定這條日誌資訊的重要程度;日誌資訊的輸出目的地指定了日誌將列印到控制檯還是檔案中;而輸出格式則控制了日誌資訊的顯 示內容。
2.1、定義配置檔案
其實您也可以完全不使用配置檔案,而是在程式碼中配置Log4j環境。但是,使用配置檔案將使您的應用程式更加靈活。Log4j支援兩種配置檔案格式,一種是XML格式的檔案,一種是Java特性檔案(鍵=值)。下面我們介紹使用Java特性檔案做為配置檔案的方法:
1.配置根Logger,其語法為:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
其中,level 是日誌記錄的優先順序,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級別。Log4j建議只使用四個級別,優 先級從高到低分別是ERROR、WARN、INFO、DEBUG。通過在這裡定義的級別,您可以控制到應用程式中相應級別的日誌資訊的開關。比如在這裡定 義了INFO級別,則應用程式中所有DEBUG級別的日誌資訊將不被打印出來。 appenderName就是指B日誌資訊輸出到哪個地方。您可以同時指定多個輸出目的地。
2.配置日誌資訊輸出目的地Appender,其語法為:
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1

log4j.appender.appenderName.option = valueN
其中,Log4j提供的appender有以下幾種:
org.apache.log4j.ConsoleAppender(控制檯),
org.apache.log4j.FileAppender(檔案),
org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌檔案),
org.apache.log4j.RollingFileAppender(檔案大小到達指定尺寸的時候產生一個新的檔案),
org.apache.log4j.WriterAppender(將日誌資訊以流格式傳送到任意指定的地方)
3.配置日誌資訊的格式(佈局),其語法為:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1

log4j.appender.appenderName.layout.option = valueN
其中,Log4j提供的layout有以e幾種:
org.apache.log4j.HTMLLayout(以HTML表格形式佈局),
org.apache.log4j.PatternLayout(可以靈活地指定佈局模式),
org.apache.log4j.SimpleLayout(包含日誌資訊的級別和資訊字串),
org.apache.log4j.TTCCLayout(包含日誌產生的時間、執行緒、類別等等資訊)
Log4J採用類似C語言中的printf函式的列印格式格式化日誌資訊,列印引數如下: %m 輸出程式碼中指定的訊息
%p 輸出優先順序,即DEBUG,INFO,WARN,ERROR,FATAL
%r 輸出自應用啟動到輸出該log資訊耗費的毫秒數
%c 輸出所屬的類目,通常就是所在類的全名
%t 輸出產生該日誌事件的執行緒名
%n 輸出一個回車換行符,Windows平臺為“rn”,Unix平臺為“n”
%d 輸出日誌時間點的日期或時間,預設格式為ISO8601,也可以在其後指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921
%l 輸出日誌事件的發生位置,包括類目名、發生的執行緒,以及在程式碼中的行數。舉例:Testlog4.main(TestLog4.java:10)
2.2、在程式碼中使用Log4j
1.得到記錄器
使用Log4j,第一步就是獲取日誌記錄器,這個記錄器將負責控制日誌資訊。其語法為:
public static Logger getLogger( String name)
通過指定的名字獲得記錄器,如果必要的話,則為這個名字建立一個新的記錄器。Name一般取本類的名字,比如:
static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )
2.讀取配置檔案
當獲得了日誌記錄器之後,第二步將配置Log4j環境,其語法為:
BasicConfigurator.configure (): 自動快速地使用預設Log4j環境。
PropertyConfigurator.configure ( String configFilename) :讀取使用Java的特性檔案編寫的配置檔案。
DOMConfigurator.configure ( String filename ) :讀取XML形式的配置檔案。
3.插入記錄資訊(格式化日誌資訊)
當上兩個必要步驟執行完畢,您就可以輕鬆地使用不同優先級別的日誌記錄語句插入到您想記錄日誌的任何地方,其語法如下:
Logger.debug ( Object message ) ;
Logger.info ( Object message ) ;
Logger.warn ( Object message ) ;
Logger.error ( Object message ) ;
2.3、日誌級別
每個Logger都被了一個日誌級別(log level),用來控制日誌資訊的輸出。日誌級別從高到低分為:
A:off 最高等級,用於關閉所有日誌記錄。
B:fatal 指出每個嚴重的錯誤事件將會導致應用程式的退出。
C:error 指出雖然發生錯誤事件,但仍然不影響系統的繼續執行。
D:warm 表明會出現潛在的錯誤情形。
E:info 一般和在粗粒度級別上,強調應用程式的執行全程。
F:debug 一般用於細粒度級別上,對除錯應用程式非常有幫助。
G:all 最低等級,用於開啟所有日誌記錄。
上面這些級別是定義在org.apache.log4j.Level類中。Log4j只建議使用4個級別,優先順序從高到低分別是error,warn,info和debug。通過使用日誌級別,可以控制應用程式中相應級別日誌資訊的輸出。例如,如果使用b了info級別,則應用程式中所有低於info級別的日誌資訊(如debug)將不會被打印出來。

Logback配置

由於springboot已經做了大部分的整合用起來就相當方便了,直接寫個測試類就可以用了,程式碼如下:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class LogController {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @RequestMapping("/log")
    public Object writeLog()
    {
        logger.debug("This is a debug message");
        logger.info("This is an info message");
        logger.warn("This is a warn message");
        logger.error("This is an error message");
        return "OK";
    }
}

直接呼叫的話你會發現並沒有debug的資訊,如果要用到debug的資訊,那就去application.yml配置下:

logging:
  file: log.log
  level:
   包名1: info
   包名2:debug

日誌檔案就在專案根目錄下的log.log檔案中