日志很重要!!!
//log4j是什么?
log4j是Apache下的一款開源的日志框架,能夠滿足我們在項目中對于日志記錄的需求。log4j提供了簡單的API調用,強大的日志格式定義以及靈活的擴展性。使用者可以自己定義Appender來滿足對于日志輸出的需求。在系統中對于記錄日志的需求并不單純。
首先,希望日志能持久化到磁盤,最基本的就是能夠保存到文件中;
其次,希望在開發和生產環境中記錄的日志并不相同,明顯開發環境的日志記錄會更多方便調試,但放到生產環境下大量的日志很容易會撐爆服務器,因此在生產環境希望只記錄重要信息。
基于不同的目的,System.out.println不能直接滿足使用者的需求,因此應該選擇功能更強的日志框架。而log4j是apache下一款著名的開源日志框架。
//為什么需要日志?
①異常的場景
產品開發、系統運維(升級、日常管理等)
②時間成本
快速、高效
③人力成本
簡化、降低難度
//日志給誰用?
//日志什么時候用?
日志作為一種調試利器,可以幫助我們觀察軟件運行時內部結構和狀態,輔助開發。日志文件分析已成為大型軟件項目中代碼調試的主要手段
①軟件測試時
軟件測試過程中,通過Debug或Trace信息,可以確認功能的實現原理及正確性。
②軟件運維時
已發布運行的軟件,當某個功能出現異常時,我們無法像開發環境一樣進行調試找原因,能留給我們的就只有日志系統。如網管的配置下載問題。
③學習軟件時
熟悉一個陌生軟件系統時,日志能夠提供很多線索給我們去了解軟件的架構和實現邏輯。
//日志什么時候該記錄?
①模塊的啟動與結束
需要對模塊的啟動和結束進行監控,從而知道模塊是否正常加載或正常退出。比如網管ICE服務的OnClientInitMe等函數。
②用戶登錄及操作
需要記錄用戶何時登錄、登出以及做了哪些操作,方便審計。比如網管的安全日志和操作日志。
③異常信息
所有捕獲異常的位置均應當記錄異常內容日志,所有與系統軟件預期不符的地方都要記錄日志。
④軟件的關鍵方法
需要記錄軟件系統的一些關鍵性操作,它是衡量系統正常運行的重要指標。比如業務/配置增刪改、激活、去激活等關鍵操作。
//日志有幾個等級?
日志等級:OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL。
通常以下幾種:TRACE、DEBUG、INFO、WARN、ERROR
①TRACE :細致入微,可以用于開發過程中追蹤bug 。
②DEBUG:系統調試信息,通常用于開發過程中對系統運行情況的監控,在實際運行環境中不進行輸出。
③INFO:系統運行的關鍵性信息,通常用于對系統運行情況的監控。
④WARN:告警信息,系統存在潛在的問題,有可能引起運行異常,但此時并未產生異常。
⑤ERROR:系統錯誤信息,需要進行及時處理和優化。
等級 |
目的 |
階段 |
對象 |
程度 |
ERROR |
告警 |
運行 |
用戶 |
準確/嚴重 |
WARN |
提醒 |
運行/使用 |
用戶 |
準確 |
INFO |
說明 |
使用 |
運維 |
簡潔 |
DEBUG |
詳解 |
開發調試 |
維護/開發 |
詳細清楚 |
TRACE |
研究 |
調試/學習 |
開發/研發 |
細致入微 |
//使用日志該注意什么?
①粒度適中
②寫有意義的log
③不同場景選擇正確的日志級別
④日志信息可理解性
⑤日志語言選擇英文
日志細節決定系統成敗!
//log4j日志該如何配置使用?
配置
在項目資源配置文件夾新建log4j.properties
### 設置###
log4j.rootLogger = debug,stdout,debugLog,infoLog,errorLog
### 輸出信息到控制臺 ###
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 級別以上的日志 ###
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 級別以上的日志 ###
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 級別以上的日志 ###
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文件一定存放在資源文件夾中,否則項目無法識別調用
設置輸出內容
編寫日志輸出內容
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級別的信息
logger.debug("This is debug message.");
// 記錄info級別的信息
logger.info("This is info message.");
// 記錄error級別的信息
logger.error("This is error message.");
}
}
測試結果
項目結構
運行結果
日志信息輸出到控制臺
日志信息保存到本地
logs文件夾系統會自動生成,無需新建
debug
error
info
-
框架
+關注
關注
0文章
403瀏覽量
17475 -
日志
+關注
關注
0文章
138瀏覽量
10639 -
Apache
+關注
關注
0文章
64瀏覽量
12463
發布評論請先 登錄
相關推薦
評論