溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

log4j有什么用

發(fā)布時(shí)間:2022-03-23 14:23:43 來(lái)源:億速云 閱讀:267 作者:小新 欄目:web開(kāi)發(fā)

小編給大家分享一下log4j有什么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

log4j的使用

日志的作用

  • 便于分析程序執(zhí)行過(guò)程

  • 方便調(diào)試

  • 可以將業(yè)務(wù)數(shù)據(jù)存儲(chǔ)到文件、數(shù)據(jù)庫(kù),有利于后期分析

log4j簡(jiǎn)介

log4j是 Apache 的一個(gè)開(kāi)源項(xiàng)目,通過(guò)設(shè)置日志級(jí)別來(lái)指定輸出哪些類型的日志。log4j功能強(qiáng)大:

  • 可以將日志信息輸出到控制臺(tái)、文件、GUI 組件、甚至是數(shù)據(jù)庫(kù)中

  • 可以控制每一條日志的輸出格式

log4j的日志級(jí)別

log4j在 org.apache.log4j.Level 類中定義了七種日志級(jí)別,級(jí)別從高到低依次為:

  • OFF   最高日志級(jí)別,即關(guān)閉日志

  • FATAL  導(dǎo)致應(yīng)用程序退出的錯(cuò)誤

  • ERROR     運(yùn)行發(fā)生錯(cuò)誤,但仍不影響系統(tǒng)(程序)繼續(xù)運(yùn)行

  • WARN    警告,即潛在的錯(cuò)誤情形

  • INFO   一般用在粗粒度級(jí)別上,記錄程序全程執(zhí)行過(guò)程,強(qiáng)調(diào)應(yīng)用程序的運(yùn)行全程

  • DEBUG   一般用于細(xì)粒度級(jí)別上,對(duì)調(diào)試應(yīng)用程序非常有幫助

  • ALL    最低日志級(jí)別,記錄所有級(jí)別的日志

一般只使用4個(gè)級(jí)別,優(yōu)先級(jí)從高到低為 ERROR > WARN > INFO > DEBUG。

log4j的組成

log4j 主要由三部分組成:

(1) Loggers (日志記錄器)    控制日志的輸出級(jí)別與日志是否輸出

(2)Appenders(輸出端) 指定日志的輸出到哪個(gè)地方(輸出到控制臺(tái)、文件等),常用的輸出端:

  • ConsoleAppender   將日志輸出到控制臺(tái)

  • FileAppender   將日志輸出到文件中

  • RollingFileAppender   將日志信息輸出到一個(gè)文件中,并指定文件尺寸,當(dāng)文件大小達(dá)到指定尺寸時(shí),會(huì)自動(dòng)把文件改名,同時(shí)創(chuàng)建一個(gè)新的文件來(lái)保存日志

  • DailyRollingFileAppender   將日志輸出到文件中,會(huì)周期性輸出到一個(gè)新的文件

  • JDBCAppender   把日志信息保存到數(shù)據(jù)庫(kù)中

(3)Layout(日志格式化器),常用的格式化器類型:

  • HTMLLayout   格式化日志輸出為HTML表格形式

  • SimpleLayout   簡(jiǎn)單的日志輸出格式化

  • PatternLayout   最強(qiáng)大的格式化器,可自定義日志輸出格式

log4j使用示例

(1)下載log4j,導(dǎo)入log4j.jar

注意是log4j,不是log4j2。

log4j的作者先開(kāi)發(fā)了log4j,版本號(hào)以1開(kāi)頭。后面對(duì)log4j進(jìn)行重構(gòu),改進(jìn)了log4j的不足,即log4j2,版本號(hào)以2開(kāi)頭。log4j和log4j2的用法區(qū)別很大。

下載的log4j,有的版本含有l(wèi)og4j.jar、log4j-core.jar、log4j-api.jar3個(gè)jar包,我們只需導(dǎo)入log4j.jar。

(2)src下新建log4j的配置文件log4j.properties

### 日志記錄器Logger的全局設(shè)置 ###
#第一個(gè)參數(shù)指定輸出的最低日志級(jí)別,即只輸出該級(jí)別及以上級(jí)別的日志
#后面的參數(shù)指定要進(jìn)行哪些配置
log4j.rootLogger = DEBUG,stdout,D,E


### 設(shè)置控制臺(tái)輸出 ###
#stdout即standard out 標(biāo)準(zhǔn)輸出,默認(rèn)為控制臺(tái),所以可將stdout換為Console
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
#指定標(biāo)準(zhǔn)輸出設(shè)備為系統(tǒng)輸出設(shè)備
log4j.appender.stdout.Target = System.out
#指定使用自定義的格式化器
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
#指定日志輸出格式
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n


### 輸出DEBUG及以上級(jí)別的日志到D://logs/debug.log###
#配置時(shí),輸出級(jí)別用首字母表示,D即DEBUG
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
#指定將日志輸出到哪個(gè)文件中
log4j.appender.D.File = D://logs/debug.log
#指定文件寫(xiě)入方式為追加
log4j.appender.D.Append = true
#指定最低輸出級(jí)別
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.DatePattern='.'yyyy-MM-dd-HH-mm
#指定日志輸出格式
log4j.appender.D.layout = org.apache.log4j.SimpleLayout 


### 輸出ERROR及以上級(jí)別的日志到D://logs/error.log ###
log4j.appender.E = org.apache.log4j.RollingFileAppender
log4j.appender.E.File =D://logs/error.log 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
#指定日志文件的最大尺寸
log4j.appender.E.MaxFileSize = 2KB
#指定最大備份數(shù)為5
log4j.appender.E.MaxBackupIndex = 5
#指定日志輸出格式使用自定義格式
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

此配置只是為了演示效果。

DailyRollingFileAppender 獨(dú)有的選項(xiàng)

DatePattern='.'yyyy-ww

可選的值:

  • '.'yyyy-MM  每月

  • '.'yyyy-ww   每周

  • '.'yyyy-MM-dd  每天

  • '.'yyyy-MM-dd-a  每天兩次

  • '.'yyyy-MM-dd-HH  每小時(shí)

  • '.'yyyy-MM-dd-HH-mm  每分鐘

比如 '.'yyyy-MM-dd-HH-mm ,每分鐘都產(chǎn)生一個(gè)同名的新文件來(lái)保存這分鐘內(nèi)的日志。

同名的新文件?就是在擴(kuò)展名后加上時(shí)間,要查看需要改擴(kuò)展名。

log4j有什么用

如果這分鐘內(nèi)沒(méi)有日志輸出,則不新建文件。

RollingFileAppender獨(dú)有的選項(xiàng)

#指定日志文件的最大尺寸
MaxFileSize = 2KB
#指定最大備份數(shù)為5
MaxBackupIndex = 5

log4j有什么用

最初的文件是error.log,達(dá)到指定的最大尺寸后,把這個(gè)文件重命名為error.log.1(擴(kuò)展名后面加索引),再新建一個(gè)error.log來(lái)保存日志。

error.log達(dá)到最大尺寸后,把error.log.1重命名為error.log.2,把error.log重命名為error.log.1,再新建一個(gè)error.log來(lái)保存日志

.......

最多可有5個(gè)備份(1,2,3,4,5)。

有了5個(gè)備份,如果error.log達(dá)到了最大尺寸,把error.log.5刪除,將error.log.4重命名為error.log.5,error.log.3重命名為error.log.4......error.log重命名為error.log.1,再新建一個(gè)error.log來(lái)保存日志。

日志輸出格式

  • HTMLLayout    

將日志以html代碼的形式輸出到指定文件中,將文件擴(kuò)展名修改為.html即可查看效果:

  • SimpleLayout 

級(jí)別 - 日志信息    

DEBUG - This is debug message.
INFO - This is info message.
ERROR - This is error message.
  • PatternLayout 

自定義格式,和 C 語(yǔ)言的 printf() 差不多,都是使用占位符:

%m   代碼中指定的日志信息

%p    日志級(jí)別,DEBUG、INFO 等

%n    換行符

%c    打印語(yǔ)句所屬的類的全名

%t     產(chǎn)生該日志的線程全名

%d    服務(wù)器當(dāng)前時(shí)間,可在后面指定格式,比如   %d{yyyy年MM月dd日 HH:mm:ss}

%l     日志時(shí)間發(fā)生的位置,包括類名、發(fā)生的線程,以及在代碼中的行數(shù),如:Test.main(Test.java:10)

%F    日志消息產(chǎn)生時(shí)所在文件的文件名

%L    代碼所在行號(hào)

%%   輸出一個(gè) %

可指定寬度、對(duì)齊方式:

%5p    寬度是5,字符個(gè)數(shù)小于5時(shí),默認(rèn)右對(duì)齊
%-5p   寬度是5,字符個(gè)數(shù)小于5時(shí),左對(duì)齊

(3)src下新建測(cè)試類test.Log4jTest

package test;

import org.apache.log4j.Logger;

public class Log4jTest {
    public static void main(String[] args) {
        // 獲取當(dāng)前類的Logger
        Logger logger = Logger.getLogger(Log4jTest.class);

        // 輸出DEBUG級(jí)別的日志,參數(shù)為日志信息
        logger.debug("This is debug message.");
        // 輸出INFO級(jí)別的日志
        logger.info("This is info message.");
        // 輸出ERROR級(jí)別的日志
        logger.error("This is error message.");
    }
}

說(shuō)明

log4j可單獨(dú)使用,單獨(dú)使用時(shí)只需添加log4j.jar包。

如果要在其他框架中使用log4j,一般還要下載添加apache的commons-logging.jar。

因?yàn)閘og4j實(shí)現(xiàn)了記錄日志的功能,commons-logging.jar定義了日志接口,commons-logging本身并不具備記錄日志的功能,二者的關(guān)系是接口-實(shí)現(xiàn)類的關(guān)系,引入commons-logging.jar,使得框架與日志的耦合從類降到了接口。

附   log4j常用配置

### 日志記錄器Logger的全局設(shè)置 ###
log4j.rootLogger = DEBUG,stdout,D,E


### 設(shè)置控制臺(tái)輸出 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n


### 輸出DEBUG及以上級(jí)別的日志到文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File =D://log/debug/debug.log 
log4j.appender.D.Append = true
log4j.appender.D.Threshold = ERROR
log4j.appender.D.DatePattern='.'yyyy-MM-dd
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及以上級(jí)別的日志到文件 ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =D://log/error/error.log 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.DatePattern='.'yyyy-MM-dd
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

以上是“l(fā)og4j有什么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI