0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

log4j日志框架分析

汽車電子技術(shù) ? 來(lái)源:Java爛筆頭 ? 作者:小週 ? 2023-02-28 14:32 ? 次閱讀


日志很重要?。?!

//log4j是什么?

log4j是Apache下的一款開(kāi)源的日志框架,能夠滿足我們?cè)陧?xiàng)目中對(duì)于日志記錄的需求。log4j提供了簡(jiǎn)單的API調(diào)用,強(qiáng)大的日志格式定義以及靈活的擴(kuò)展性。使用者可以自己定義Appender來(lái)滿足對(duì)于日志輸出的需求。在系統(tǒng)中對(duì)于記錄日志的需求并不單純。

首先,希望日志能持久化到磁盤,最基本的就是能夠保存到文件中;

其次,希望在開(kāi)發(fā)和生產(chǎn)環(huán)境中記錄的日志并不相同,明顯開(kāi)發(fā)環(huán)境的日志記錄會(huì)更多方便調(diào)試,但放到生產(chǎn)環(huán)境下大量的日志很容易會(huì)撐爆服務(wù)器,因此在生產(chǎn)環(huán)境希望只記錄重要信息。

基于不同的目的,System.out.println不能直接滿足使用者的需求,因此應(yīng)該選擇功能更強(qiáng)的日志框架。而log4j是apache下一款著名的開(kāi)源日志框架。

//為什么需要日志?

①異常的場(chǎng)景

產(chǎn)品開(kāi)發(fā)、系統(tǒng)運(yùn)維(升級(jí)、日常管理等)

②時(shí)間成本

快速、高效

③人力成本

簡(jiǎn)化、降低難度

//日志給誰(shuí)用?

pYYBAGP9n36ARCiXAAGH2W3m17o808.png

//日志什么時(shí)候用?

日志作為一種調(diào)試?yán)?,可以幫助我們觀察軟件運(yùn)行時(shí)內(nèi)部結(jié)構(gòu)和狀態(tài),輔助開(kāi)發(fā)。日志文件分析已成為大型軟件項(xiàng)目中代碼調(diào)試的主要手段

①軟件測(cè)試時(shí)

軟件測(cè)試過(guò)程中,通過(guò)Debug或Trace信息,可以確認(rèn)功能的實(shí)現(xiàn)原理及正確性。

②軟件運(yùn)維時(shí)

已發(fā)布運(yùn)行的軟件,當(dāng)某個(gè)功能出現(xiàn)異常時(shí),我們無(wú)法像開(kāi)發(fā)環(huán)境一樣進(jìn)行調(diào)試找原因,能留給我們的就只有日志系統(tǒng)。如網(wǎng)管的配置下載問(wèn)題。

③學(xué)習(xí)軟件時(shí)

熟悉一個(gè)陌生軟件系統(tǒng)時(shí),日志能夠提供很多線索給我們?nèi)チ私廛浖募軜?gòu)和實(shí)現(xiàn)邏輯。

//日志什么時(shí)候該記錄?

①模塊的啟動(dòng)與結(jié)束

需要對(duì)模塊的啟動(dòng)和結(jié)束進(jìn)行監(jiān)控,從而知道模塊是否正常加載或正常退出。比如網(wǎng)管ICE服務(wù)的OnClientInitMe等函數(shù)。

②用戶登錄及操作

需要記錄用戶何時(shí)登錄、登出以及做了哪些操作,方便審計(jì)。比如網(wǎng)管的安全日志和操作日志。

③異常信息

所有捕獲異常的位置均應(yīng)當(dāng)記錄異常內(nèi)容日志,所有與系統(tǒng)軟件預(yù)期不符的地方都要記錄日志。

④軟件的關(guān)鍵方法

需要記錄軟件系統(tǒng)的一些關(guān)鍵性操作,它是衡量系統(tǒng)正常運(yùn)行的重要指標(biāo)。比如業(yè)務(wù)/配置增刪改、激活、去激活等關(guān)鍵操作。

//日志有幾個(gè)等級(jí)?

日志等級(jí):OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL。

通常以下幾種:TRACE、DEBUG、INFO、WARN、ERROR

①TRACE :細(xì)致入微,可以用于開(kāi)發(fā)過(guò)程中追蹤bug 。

②DEBUG:系統(tǒng)調(diào)試信息,通常用于開(kāi)發(fā)過(guò)程中對(duì)系統(tǒng)運(yùn)行情況的監(jiān)控,在實(shí)際運(yùn)行環(huán)境中不進(jìn)行輸出。

③INFO:系統(tǒng)運(yùn)行的關(guān)鍵性信息,通常用于對(duì)系統(tǒng)運(yùn)行情況的監(jiān)控。

④WARN:告警信息,系統(tǒng)存在潛在的問(wèn)題,有可能引起運(yùn)行異常,但此時(shí)并未產(chǎn)生異常。

⑤ERROR:系統(tǒng)錯(cuò)誤信息,需要進(jìn)行及時(shí)處理和優(yōu)化。

等級(jí)

目的

階段

對(duì)象

程度

ERROR

告警

運(yùn)行

用戶

準(zhǔn)確/嚴(yán)重

WARN

提醒

運(yùn)行/使用

用戶

準(zhǔn)確

INFO

說(shuō)明

使用

運(yùn)維

簡(jiǎn)潔

DEBUG

詳解

開(kāi)發(fā)調(diào)試

維護(hù)/開(kāi)發(fā)

詳細(xì)清楚

TRACE

研究

調(diào)試/學(xué)習(xí)

開(kāi)發(fā)/研發(fā)

細(xì)致入微

//使用日志該注意什么?

①粒度適中

②寫有意義的log

③不同場(chǎng)景選擇正確的日志級(jí)別

④日志信息可理解性

⑤日志語(yǔ)言選擇英文

日志細(xì)節(jié)決定系統(tǒng)成??!

//log4j日志該如何配置使用?

配置

在項(xiàng)目資源配置文件夾新建log4j.properties

### 設(shè)置###
log4j.rootLogger = debug,stdout,debugLog,infoLog,errorLog

### 輸出信息到控制臺(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.debugLog = org.apache.log4j.DailyRollingFileAppender
log4j.appender.debugLog.File =logs/debug/log.log
log4j.appender.debugLog.DatePattern = '.'yyyy-MM-dd-HH-mm'.log'
log4j.appender.debugLog.Append = true
log4j.appender.debugLog.Threshold = DEBUG
log4j.appender.debugLog.layout = org.apache.log4j.PatternLayout
log4j.appender.debugLog.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 輸出INFO 級(jí)別以上的日志 ###
log4j.appender.infoLog = org.apache.log4j.DailyRollingFileAppender
log4j.appender.infoLog.File =logs/info/log.log
log4j.appender.infoLog.DatePattern = '.'yyyy-MM-dd-HH-mm'.log'
log4j.appender.infoLog.Append = true
log4j.appender.infoLog.Threshold = INFO
log4j.appender.infoLog.layout = org.apache.log4j.PatternLayout
log4j.appender.infoLog.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 輸出ERROR 級(jí)別以上的日志 ###
log4j.appender.errorLog = org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorLog.File =logs/error/log.log
log4j.appender.errorLog.DatePattern = '.'yyyy-MM-dd-HH-mm'.log'
log4j.appender.errorLog.Append = true
log4j.appender.errorLog.Threshold = ERROR
log4j.appender.errorLog.layout = org.apache.log4j.PatternLayout
log4j.appender.errorLog.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} 

注意:log4j.properties文件一定存放在資源文件夾中,否則項(xiàng)目無(wú)法識(shí)別調(diào)用

設(shè)置輸出內(nèi)容

編寫日志輸出內(nèi)容

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TestLog4j {

    private static  Logger logger = LoggerFactory.getLogger(TestLog4j.class);

    public static void main(String[] args) {

        System.out.println("This is println message.");
        // 記錄debug級(jí)別的信息
        logger.debug("This is debug message.");
        // 記錄info級(jí)別的信息
        logger.info("This is info message.");
        // 記錄error級(jí)別的信息
        logger.error("This is error message.");
    }
}

測(cè)試結(jié)果

項(xiàng)目結(jié)構(gòu)

pYYBAGP9n8CAaJOJAAGVqIfb-Rc469.png

運(yùn)行結(jié)果

日志信息輸出到控制臺(tái)

pYYBAGP9n8iAOrcXAAEGmjA40cU589.png

日志信息保存到本地

logs文件夾系統(tǒng)會(huì)自動(dòng)生成,無(wú)需新建

pYYBAGP9n9OAFxpNAAEIeb63AQc990.png

debug

pYYBAGP9n9yAceceAABXXfvXvqQ753.png

error

poYBAGP9n-OASkweAAAWGwKUNlc643.png

info

pYYBAGP9n-qAeRlwAABXx2baLEg563.png


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 框架
    +關(guān)注

    關(guān)注

    0

    文章

    403

    瀏覽量

    17483
  • 日志
    +關(guān)注

    關(guān)注

    0

    文章

    138

    瀏覽量

    10642
  • Apache
    +關(guān)注

    關(guān)注

    0

    文章

    64

    瀏覽量

    12472
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    日志框架簡(jiǎn)介-Slf4j+Logback入門實(shí)踐

    前言 隨著互聯(lián)網(wǎng)和大數(shù)據(jù)的迅猛發(fā)展,分布式日志系統(tǒng)和日志分析系統(tǒng)已廣泛應(yīng)用,幾乎所有應(yīng)用程序都使用各種日志框架記錄程序運(yùn)行信息。因此,作為工
    的頭像 發(fā)表于 07-30 10:00 ?1143次閱讀
    <b class='flag-5'>日志</b><b class='flag-5'>框架</b>簡(jiǎn)介-Slf<b class='flag-5'>4j</b>+Logback入門實(shí)踐

    slf4j打印日志必須的三個(gè)依賴包相關(guān)資料推薦

    1、slf4j打印日志必須的三個(gè)依賴包  日志相關(guān)包 slf4j打印日志必須的三個(gè)依賴包  slf4j
    發(fā)表于 10-19 14:57

    STM32Cube工具的log4j漏洞CVE-2021-44228和CVE-2021-45046有何影響?

    STM32Cube工具的log4j漏洞CVE-2021-44228和CVE-2021-45046有何影響?
    發(fā)表于 12-07 07:02

    java 日志框架Spring Boot分析

    應(yīng)用程序中輸出相應(yīng)的日志。 在傳統(tǒng)Java應(yīng)用程序中,我們一般會(huì)使用類似Log4j這樣的日志框架來(lái)輸出日志,而不是直接在代碼中通過(guò)Syste
    發(fā)表于 09-28 14:58 ?0次下載

    logback異常輸出詳細(xì)信息(調(diào)用堆棧)分析

     Logback是一個(gè)開(kāi)源的日志組件,是log4j的作者開(kāi)發(fā)的用來(lái)替代log4j的。logback由三個(gè)部分組成,logback-core, logback-classic, logback-access。其中l(wèi)ogback-c
    發(fā)表于 11-28 16:31 ?8334次閱讀

    Java日志框架中的王者是誰(shuí)

    不及Apache 的新一代日志框架 - Log4j 目前來(lái)看,Log4j2 就是王者,其他日志框架
    的頭像 發(fā)表于 10-13 09:12 ?1369次閱讀

    使用Keysight免費(fèi)評(píng)估Log4j/Log4Shell零日漏洞

    在過(guò)去72小時(shí)左右的時(shí)間里,網(wǎng)絡(luò)安全領(lǐng)域的大多數(shù)人已經(jīng)意識(shí)到Log4j/Log4Shell零日漏洞及其對(duì)大多數(shù)web服務(wù)器、云應(yīng)用程序、互聯(lián)網(wǎng)設(shè)備和嵌入式設(shè)備的廣泛影響。你可以閱讀CVE-2021-44228中記錄的所有血淋淋的細(xì)節(jié),但底線是:這可能非常非常糟糕。
    的頭像 發(fā)表于 12-21 10:50 ?1539次閱讀

    Log4-detector Log4J漏洞版本掃描器

    log4j-detector.zip
    發(fā)表于 05-06 11:55 ?0次下載
    <b class='flag-5'>Log4</b>-detector <b class='flag-5'>Log4J</b>漏洞版本掃描器

    log4j-finder Log4Shell漏洞掃描工具

    log4j-finder.zip
    發(fā)表于 05-06 11:54 ?1次下載
    <b class='flag-5'>log4j</b>-finder <b class='flag-5'>Log4</b>Shell漏洞掃描工具

    fix_log4j2 log4j2漏洞緩解工具

    fix_log4j2.zip
    發(fā)表于 05-06 10:22 ?0次下載
    fix_<b class='flag-5'>log4j</b>2 <b class='flag-5'>log4j</b>2漏洞緩解工具

    如何復(fù)現(xiàn)Log4j2漏洞

    ApacheLog4j2是一個(gè)開(kāi)源的Java日志框架,被廣泛地應(yīng)用在中間件、開(kāi)發(fā)框架與Web應(yīng)用中。
    的頭像 發(fā)表于 02-13 10:55 ?1380次閱讀

    Spring Boot的日志框架使用

    目前市面上常見(jiàn)的日志框架有:slf4j(Simple Logging Facade for Java)、logback、log4jlog4j
    的頭像 發(fā)表于 06-02 10:59 ?949次閱讀
    Spring Boot的<b class='flag-5'>日志</b><b class='flag-5'>框架</b>使用

    基于Rust的Log日志庫(kù)介紹

    了一種簡(jiǎn)單的方法來(lái)實(shí)現(xiàn)日志記錄,本文將介紹如何使用Rust的Log庫(kù)作為日志門面,并結(jié)合env_logger和log4rs兩個(gè)日志庫(kù)的實(shí)戰(zhàn)用
    的頭像 發(fā)表于 09-19 14:49 ?3485次閱讀

    保護(hù)Log4j日志中的敏感數(shù)據(jù),兩步搞定!

    log4j在準(zhǔn)備添加日志消息時(shí)調(diào)用此方法。在MaskingAppender類中,我們覆蓋這個(gè)方法來(lái)攔截日志消息,使用maskSensitiveData()方法對(duì)敏感數(shù)據(jù)應(yīng)用masking,然后將修改后的消息傳遞給超類的appen
    的頭像 發(fā)表于 10-18 16:03 ?764次閱讀

    Log4cpp優(yōu)勢(shì)及優(yōu)點(diǎn)

    命令行、文件、回卷文件、內(nèi)存、syslog服務(wù)器、Win事件日志等; 可以動(dòng)態(tài)控制日志記錄級(jí)別,在效率和功能中進(jìn)行調(diào)整; 所有配置可以通過(guò)配置文件進(jìn)行動(dòng)態(tài)調(diào)整; 多語(yǔ)言支持,包括Java(log4j
    的頭像 發(fā)表于 11-09 14:27 ?700次閱讀
    <b class='flag-5'>Log4</b>cpp優(yōu)勢(shì)及優(yōu)點(diǎn)