日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Log配置教程及框架性能比較,看這篇就夠了!

本文轉(zhuǎn)載自微信公眾號(hào)「Java極客技術(shù)」,作者鴨血粉絲 。轉(zhuǎn)載本文請(qǐng)聯(lián)系Java極客技術(shù)公眾號(hào)。

一、摘要

不管是使用何種編程語言,何種框架,日志輸出幾乎無處不再,也是任何商業(yè)軟件中必不可少的一部分。

總結(jié)起來,日志的用途大致可以歸納成以下三種:

問題追蹤:通過日志不僅僅包括我們程序的一些bug,也可以在安裝配置時(shí),通過日志可以發(fā)現(xiàn)問題。

狀態(tài)監(jiān)控:通過實(shí)時(shí)分析日志,可以監(jiān)控系統(tǒng)的運(yùn)行狀態(tài),做到早發(fā)現(xiàn)問題、早處理問題。

安全審計(jì):審計(jì)主要體現(xiàn)在安全上,通過對(duì)日志進(jìn)行分析,可以發(fā)現(xiàn)是否存在非授權(quán)的操作。

以 Java 編程語言為例,打印日志的方式有很多,例如通過System.out.print()方法將關(guān)鍵信息輸出到控制臺(tái),也可以通過 JDK 自帶的日志Logger類輸出,雖然 JDK 從1.4開始支持日志輸出,但是功能單一,無法更好的滿足商業(yè)要求,于是誕生了很多第三方日志庫,像我們所熟悉的主流框架log4j、log4j2、logback等,提供的 API 功能都遠(yuǎn)勝 JDK 提供的Logger。

二、Log4j

2.1、介紹

Log4j 是一種非常流行的日志框架,由Ceki Gülcü首創(chuàng),之后將其開源貢獻(xiàn)給 Apache 軟件基金會(huì)。

Log4j 有三個(gè)主要的組件:Loggers(記錄器),Appenders (輸出源)和Layouts(布局)。這里可簡單理解為日志類別、日志要輸出的地方和日志以何種形式輸出。

綜合使用這三個(gè)組件可以輕松地記錄信息的類型和級(jí)別,并可以在運(yùn)行時(shí)控制日志輸出的樣式和位置。

Log4j 的架構(gòu)大致如下:

當(dāng)我們使用 Log4j 輸出一條日志時(shí),Log4j 自動(dòng)通過不同的Appender(輸出源)把同一條日志輸出到不同的目的地。例如:

  • console:輸出到屏幕;
  • file:輸出到文件;
  • socket:通過網(wǎng)絡(luò)輸出到遠(yuǎn)程計(jì)算機(jī);
  • jdbc:輸出到數(shù)據(jù)庫

在輸出日志的過程中,通過Filter來過濾哪些log需要被輸出,哪些log不需要被輸出。

在Loggers(記錄器)組件中,級(jí)別分五種:DEBUG、INFO、WARN、ERROR和FATAL。

這五個(gè)級(jí)別是有順序的,DEBUG < INFO < WARN < ERROR < FATAL,分別用來指定這條日志信息的重要程度,明白這一點(diǎn)很重要,Log4j有一個(gè)規(guī)則:只輸出級(jí)別不低于設(shè)定級(jí)別的日志信息。

假設(shè)Loggers級(jí)別設(shè)定為INFO,則INFO、WARN、ERROR和FATAL級(jí)別的日志信息都會(huì)輸出,而級(jí)別比INFO低的DEBUG則不會(huì)輸出。

最后,通過Layout來格式化日志信息,例如,自動(dòng)添加日期、時(shí)間、方法名稱等信息。

具體輸出樣式配置,可以參考如下內(nèi)容Log4j2 - Layouts布局介紹

2.2、項(xiàng)目應(yīng)用

以 Java 項(xiàng)目為例,在 Maven 的pom.xml中添加如下依賴!

2.2.1、添加 maven 依賴

 
 
 
 
  1.     
  2.         org.slf4j
  3.         slf4j-api
  4.         1.6.6
  5.     
  6.     
  7.         org.slf4j
  8.         slf4j-log4j12
  9.         1.6.6
  10.     
  11.     
  12.         log4j
  13.         log4j
  14.         1.2.17
  15.     

2.2.2、創(chuàng)建log4j配置

在實(shí)際應(yīng)用中,要使Log4j在系統(tǒng)中運(yùn)行須事先設(shè)定配置文件。

配置文件實(shí)際上也就是對(duì)Logger、Appender及Layout進(jìn)行相應(yīng)設(shè)定。

Log4j支持兩種配置文件格式,一種是XML格式的文件,一種是properties屬性文件,二選一。

創(chuàng)建一個(gè)log4j.xml或者log4j.properties,將其放入項(xiàng)目根目錄下。

1、XML格式

 
 
 
 
  1.     
  2.     
  3.         
  4.         
  5.         
  6.             
  7.             
  8.         
  9.     
  10.     
  11.     
  12.         
  13.         
  14.         
  15.         
  16.         
  17.         
  18.         
  19.             
  20.             
  21.         
  22.     
  23.     
  24.     
  25.         
  26.     
  27.     
  28.     
  29.     
  30.         
  31.         
  32.         
  33.     

2、XML格式

 
 
 
 
  1. log4j.rootLogger=INFO,M,C,E
  2. log4j.additivity.monitorLogger=false
  3. # INFO級(jí)別文件輸出配置
  4. log4j.appender.M=org.apache.log4j.DailyRollingFileAppender
  5. log4j.appender.M.File=/logs/info.log
  6. log4j.appender.M.ImmediateFlush=false
  7. log4j.appender.M.BufferedIO=true
  8. log4j.appender.M.BufferSize=16384
  9. log4j.appender.M.Append=true
  10. log4j.appender.M.Threshold=INFO
  11. log4j.appender.M.DatePattern='.'yyyy-MM-dd
  12. log4j.appender.M.layout=org.apache.log4j.PatternLayout
  13. log4j.appender.M.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} %p %l %m %n
  14. # ERROR級(jí)別文件輸出配置
  15. log4j.appender.E=org.apache.log4j.DailyRollingFileAppender
  16. log4j.appender.E.File=/logs/error.log
  17. log4j.appender.E.ImmediateFlush=true
  18. log4j.appender.E.Append=true
  19. log4j.appender.E.Threshold=ERROR
  20. log4j.appender.E.DatePattern='.'yyyy-MM-dd
  21. log4j.appender.E.layout=org.apache.log4j.PatternLayout
  22. log4j.appender.E.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} %p %l %m %n
  23. # 控制臺(tái)輸出配置
  24. log4j.appender.C=org.apache.log4j.ConsoleAppender
  25. log4j.appender.C.Threshold=INFO
  26. log4j.appender.C.layout=org.apache.log4j.PatternLayout
  27. log4j.appender.C.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %l %m %n

2.2.3、log4j使用

在需要打印日志的類中,引入Logger類,在需要的地方打印即可!

 
 
 
 
  1. package org.example.log4j.service;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. public class LogPrintUtil {
  5.     /**log靜態(tài)常量*/
  6.     private static final Logger logger = LoggerFactory.getLogger(LogPrintUtil.class);
  7.     public static void main(String[] args){
  8.             logger.info("info信息");
  9.             logger.warn("warn信息");
  10.             logger.error("error信息");
  11.     }
  12. }

當(dāng)然你還可以這樣寫

 
 
 
 
  1. if(logger.isInfoEnabled()) {
  2.     logger.info("info信息");
  3. }
  4. if(logger.isWarnEnabled()) {
  5.     logger.warn("warn信息");
  6. }

2.2.4、isInfoEnabled()有何作用呢?

簡單來說,在某些場景下,用isInfoEnabled()方法判斷下是能提升性能的!

例如我們打印這段內(nèi)容logger.info("User:" + userId + appId),程序在打印這行代碼時(shí),先對(duì)內(nèi)容("User:" + userId + appId)進(jìn)行字符串拼接,然后再輸出。

如果當(dāng)前配置文件中日志輸出級(jí)別是info,是直接輸出的,當(dāng)日志輸出級(jí)別是error時(shí),logger.info()的內(nèi)容時(shí)不輸出的,但是我們卻進(jìn)行了字符串拼接,如果加上if(logger.isInfoEnabled())進(jìn)行一次判定,logger.info()就不會(huì)執(zhí)行,從而更好的提升性能,這個(gè)尤其是在高并發(fā)和復(fù)雜log打印情況下提升非常顯著。

另外,ERROR及其以上級(jí)別的log信息是一定會(huì)被輸出的,所以只有l(wèi)ogger.isDebugEnabled、logger.isInfoEnabled和logger.isWarnEnabled()方法,而沒有l(wèi)ogger.isErrorEnabled方法。

三、Log4j2

3.1、介紹

log4j2 是 log4j 1.x 的升級(jí)版,參考了 logback 的一些優(yōu)秀的設(shè)計(jì),并且修復(fù)了一些問題,因此帶來了一些重大的提升,主要特點(diǎn)有:

  • 異常處理:在logback中,Appender中的異常不會(huì)被應(yīng)用感知到,但是在log4j2中,提供了一些異常處理機(jī)制。
  • 性能提升, log4j2相較于log4j 1和logback都具有很明顯的性能提升,后面會(huì)有官方測試的數(shù)據(jù)。
  • 自動(dòng)重載配置:參考了logback的設(shè)計(jì),當(dāng)然會(huì)提供自動(dòng)刷新參數(shù)配置,最實(shí)用的就是我們?cè)谏a(chǎn)上可以動(dòng)態(tài)的修改日志的級(jí)別而不需要重啟應(yīng)用——那對(duì)監(jiān)控來說,是非常敏感的。
  • 無垃圾機(jī)制:log4j2在大部分情況下,都可以使用其設(shè)計(jì)的一套無垃圾機(jī)制,避免頻繁的日志收集導(dǎo)致的jvm gc。

3.2、項(xiàng)目應(yīng)用

3.2.1、添加 maven 依賴

 
 
 
 
  1.     
  2.     
  3.         org.slf4j
  4.         slf4j-api
  5.         1.7.13
  6.     
  7.     
  8.     
  9.         org.slf4j
  10.         jcl-over-slf4j
  11.         1.7.13
  12.         runtime
  13.     
  14.     
  15.     
  16.         org.apache.logging.log4j
  17.         log4j-api
  18.         2.4.1
  19.     
  20.     
  21.         org.apache.logging.log4j
  22.         log4j-core
  23.         2.4.1
  24.     
  25.     
  26.     
  27.         org.apache.logging.log4j
  28.         log4j-slf4j-impl
  29.         2.4.1
  30.     
  31.     
  32.     
  33.         com.lmax
  34.         disruptor
  35.         3.2.0
  36.     

3.2.2、創(chuàng)建log4j2配置

在項(xiàng)目的根目錄下創(chuàng)建一個(gè)log4j2.xml的文件,與log4j相比,log4j2的異步輸出日志性能非常強(qiáng)勁,配置如下:

1、同步輸出日志

 
 
 
 
  1.     
  2.     
  3.         /logs/log4j2
  4.         /logs/log4j2/history
  5.     
  6.     
  7.         
  8.         
  9.         
  10.         
  11.         
  12.         
  13.             
  14.             
  15.         
  16.         
  17.         
  18.             
  19.             
  20.             
  21.             
  22.             
  23.                 
  24.                 
  25.                 
  26.             
  27.                
  28.             
  29.         
  30.         
  31.             
  32.             
  33.             
  34.                 
  35.                 
  36.             
  37.             
  38.         
  39.         
  40.             
  41.             
  42.             
  43.                 
  44.                 
  45.             
  46.             
  47.         
  48.     
  49.     
  50.     
  51.          
  52.         
  53.          
  54.         
  55.             
  56.         
  57.     

2、異步輸出日志

 
 
 
 
  1.     
  2.     
  3.         /logs/log4j2
  4.         /logs/log4j2/history
  5.     
  6.     
  7.         
  8.         
  9.         
  10.         
  11.         
  12.         
  13.             
  14.             
  15.         
  16.         
  17.         
  18.             
  19.             
  20.             
  21.             
  22.             
  23.                 
  24.                 
  25.                 
  26.             
  27.                
  28.             
  29.         
  30.         
  31.             
  32.             
  33.             
  34.                 
  35.                 
  36.             
  37.             
  38.         
  39.         
  40.             
  41.             
  42.             
  43.                 
  44.                 
  45.             
  46.             
  47.         
  48.     
  49.     
  50.     
  51.          
  52.         
  53.             
  54.             
  55.         
  56.          
  57.         
  58.     

詳細(xì) API 可以參考官方網(wǎng)站!

3.2.3、log4j2使用

與 log4j 類似,直接在需要位置打印日志即可

 
 
 
 
  1. package org.example.log4j.service;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. public class LogPrintUtil {
  5.     /**log靜態(tài)常量*/
  6.     private static final Logger logger = LoggerFactory.getLogger(LogPrintUtil.class);
  7.     public static void main(String[] args){
  8.             logger.info("info信息");
  9.             logger.warn("warn信息");
  10.             logger.error("error信息");
  11.     }
  12. }

四、Logback

4.1、介紹

Logback 也是用 java 編寫一款非常熱門的日志開源框架,由 log4j 創(chuàng)始人寫的,性能比 log4j 要好!

logback 主要分為3個(gè)模塊:

  • logback-core:核心代碼模塊
  • logback-classic:log4j的一個(gè)改良版本,同時(shí)實(shí)現(xiàn)了slf4j的接口,這樣你如果之后要切換其他日志組件也是一件很容易的事
  • logback-access:訪問模塊與Servlet容器集成提供通過Http來訪問日志的功能

4.2、項(xiàng)目應(yīng)用

4.2.1、添加 maven 依賴

 
 
 
 
  1.     ch.qos.logback
  2.     logback-classic
  3.     1.2.3
  4.     org.codehaus.janino
  5.     janino
  6.     2.7.8

4.2.2、創(chuàng)建logback配置文件

1、配置說明

logback在啟動(dòng)的時(shí)候,會(huì)按照下面的順序加載配置文件:

  • 如果java程序啟動(dòng)時(shí)指定了logback.configurationFile屬性,就用該屬性指定的配置文件。如java -Dlogback.configurationFile=/path/to/mylogback.xml Test,這樣執(zhí)行Test類的時(shí)候就會(huì)加載/path/to/mylogback.xml配置
  • 在classpath中查找logback.groovy文件
  • 在classpath中查找logback-test.xml文件
  • 在classpath中查找logback.xml文件
  • 如果是jdk6+,那么會(huì)調(diào)用ServiceLoader查找 com.qos.logback.classic.spi.Configurator接口的第一個(gè)實(shí)現(xiàn)類
  • 自動(dòng)使用ch.qos.logback.classic.BasicConfigurator,在控制臺(tái)輸出日志

上面的順序表示優(yōu)先級(jí),使用java -D配置的優(yōu)先級(jí)最高,只要獲取到配置后就不會(huì)再執(zhí)行下面的流程。相關(guān)代碼可以看ContextInitializer#autoConfig()方法。

2、同步輸出日志

 
 
 
 
  1.     
  2.     
  3.     
  4.     
  5.     
  6.     
  7.     
  8.     
  9.     
  10.       
  11.     
  12.     
  13.     
  14.     
  15.         value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{90} - %msg%n" />
  16.     
  17.     ${CONTEXT_NAME}
  18.     
  19.     
  20.         
  21.         
  22.             ${CUSTOM_LOG_PATTERN}
  23.             UTF-
    文章標(biāo)題:Log配置教程及框架性能比較,看這篇就夠了!
    當(dāng)前路徑:http://m.5511xx.com/article/cdssggp.html