日志很重要?。?!
//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í)用?
//日志什么時(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)
運(yùn)行結(jié)果
日志信息輸出到控制臺(tái)
日志信息保存到本地
logs文件夾系統(tǒng)會(huì)自動(dòng)生成,無(wú)需新建
debug
error
info
-
框架
+關(guān)注
關(guān)注
0文章
403瀏覽量
17483 -
日志
+關(guān)注
關(guān)注
0文章
138瀏覽量
10642 -
Apache
+關(guān)注
關(guān)注
0文章
64瀏覽量
12472
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論