日誌工具——slf4j

1、概述

  簡單日記門面(simple logging Facade for java)SLF4J是爲各類loging APIs提供一個簡單統一的接口,從而使得最終用戶可以在部署的時候配置本身但願的loging APIs實現。java

  百度百科:apache

  SLF4J,即簡單日誌門面(Simple Logging Facade for Java),不是具體的日誌解決方案,它只服務於各類各樣的日誌系統。按照官方的說法,SLF4J是一個用於日誌系統的簡單Facade,容許最終用戶在部署其應用時使用其所但願的日誌Systemapp

  爲何使用slf4j:ide

    咱們在開發過程當中可能使用各類log,每一個Log有不一樣的風格、佈局,若是想靈活的切換那麼slf4j是比較好的選擇。佈局

2、入門程序

  引入依賴: 性能

    <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.2</version>
        </dependency>

  這樣咱們的依賴中就會多出3個jar,分別是:測試

  引入配置文件:編碼

   這裏咱們結合的是log4j,因此引入Log4j的的配置文件在當前classpath下:log4j.propertiesspa

#   可設置級別:TRACE→DEBUG→INFO→WARNING→ERROR→FATAL→OFF
#   高級別level會屏蔽低級別level。
#   debug:顯示debug、info、error
#   info:顯示info、error

#log4j.rootLogger=DEBUG,console,file
log4j.rootLogger=INFO,console


#輸出到控制檯
log4j.appender.console=org.apache.log4j.ConsoleAppender
#設置輸出樣式
log4j.appender.console.layout=org.apache.log4j.PatternLayout
#日誌輸出信息格式爲
log4j.appender.console.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}]-[%t-%5p]-[%C-%M(%L)]: %m%n

#輸出到文件(這裏默認爲追加方式)
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=F:/LinkinPark/logs/Log4J.log
#樣式爲TTCCLayout
#log4j.appender.file.layout=org.apache.log4j.TTCCLayout

#自定義樣式
#%c 輸出所屬的類目,一般就是所在類的全名
#%C 輸出Logger所在類的名稱,一般就是所在類的全名
#%d 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也能夠在其後指定格式,好比:%d{yyy MMM dd HH:mm:ss , SSS},%d{ABSOLUTE},%d{DATE}
#%F 輸出所在類的類名稱,只有類名。
#%l 輸出語句所在的行數,包括類名+方法名+文件名+行數
#%L 輸出語句所在的行數,只輸出數字
#%m 輸出代碼中指定的訊息,如log(message)中的message
#%M 輸出方法名
#%p 輸出日誌級別,即DEBUG,INFO,WARN,ERROR,FATAL
#%r 輸出自應用啓動到輸出該log信息耗費的毫秒數
#%t 輸出產生該日誌事件的線程名
#%n 輸出一個回車換行符,Windows平臺爲「/r/n」,Unix平臺爲「/n」
#%% 用來輸出百分號「%」
#log4j.appender.Linkin.layout.ConversionPattern=%n[%l%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m
#log4j.appender.Linkin.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}[%C]-[%p] %m%n
#log4j.appender.Linkin.layout.ConversionPattern = %d{ABSOLUTE} %5p %t %c{2}:%L - %m%n
View Code

   編碼測試代碼:.net

    初始化logger的方式不同了:

 private static final Logger log = LoggerFactory.getLogger(LogTest.class);

   //以前的方式:public static Logger log = Logger.getLogger(LogTest.class);

    log的輸出日誌的寫法也稍有不一樣(下節講解):

     log.info("info...{}", "info..."); log.warn("warn...{}", age);

  完整測試代碼以下:

package com.log; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 日誌測試類 * 做者: Administrator * 日期: 2017/9/20 **/
public class LogTest { // 獲取日誌對象
    private static final Logger log = LoggerFactory.getLogger(LogTest.class); private static Integer age = 18; private static String name = "Alice"; public static void log() { log.debug("debug....{}", "debug..."); log.info("info...{}", "info..."); log.warn("warn...{}", age); log.error("error...{}", name); try { int i = 10 / 0; } catch (Exception e) { log.error(e.getMessage()); } } public static void main(String[] args) { log(); } }

  結果:

  

  入門程序參考自http://blog.csdn.net/anialy/article/details/8529188

3、slf4j的格式

  因爲log4j的拼接字符串的形式,不管從性能上或者從優雅性上,都難以知足,因此,咱們強烈推薦使用slf4j來進行日誌記錄!

  使用log4j輸出程序中參數變量的日誌寫法大概是這樣的: 

if (logger.isDebugEnabled()) { logger.debug("Processing trade with id: " + id + " symbol: " + symbol); }

  切換爲slf4j後:

logger.debug("Processing trade with id: {} and symbol : {} ", id, symbol);

  能夠看到,經過使用大括號 {} 來佔位,再經過參數的傳入來避免了拼接字符串的性能與代碼優雅性問題,同時省去了麻煩的isInfoEnabled()的判斷

   固然,slf4j日誌還有一些重載方法,可參見API!

  大括號 {} 對應如果POJO類等應當重寫toString()方法

相關文章
相關標籤/搜索