C++日誌系統log4cxx使用總結

weixin_34041003發表於2016-06-27
本文主要從log4cxx級別、layout、格式化、命名規則、Filter幾個方面介紹。
 
一、log4cxx命名規則
        Logger由一個String類的名字識別,logger的名字是大小寫敏感的,且名字之間具有繼承的關係,子名有父名作為字首,用點號.分隔。如:x.y是x.y.z的父親。根logger (root logger)是所有logger的祖先, 它具有如下屬性:1) 它總是存在的;2) 它不可以通過名字獲得。通過呼叫public static Logger Logger.getRootLogger()獲得root logger;通過呼叫public static Logger Logger.getLogger(String name)或者public static Logger Logger.getLogger(Class clazz)獲得或者建立)一個named logger。後者相當於呼叫Logger.getLogger(clazz.getName())。在某物件中,用該物件所屬的類為引數,呼叫Logger.getLogger(Class clazz)以獲得logger被認為是目前 所知的最理智的命名logger的方法。
 
 
二、log4cxx Log Level級別介紹
 
     每個logger都被分配了一個日誌級別 (log level),用來控制日誌資訊的輸出。未被分配level的 logger將繼承它最近的父logger的level。每條輸出到logger的日誌請求(logging request)也都有一個 level,如果該request的level大於等於該logger的level,則該request將被處理(稱為enabled);否則該 request將被忽略。故可得知:1、logger的level越低,表示該logger越詳細 2、logging request的 level越高,表示該logging request越優先輸出 3、如果沒有設定日誌記錄器(Logger)的級別,那麼它將 會繼承最近的祖先的級別。因此,如果在包com.foo.bar中建立一個日誌記錄器(Logger)並且沒有設定級 別,那它將會繼承在包com.foo中建立的日誌記錄器(Logger)的級別。如果在com.foo中沒有建立日誌記錄 器(Logger)的話,那麼在com.foo.bar中建立的日誌記錄器(Logger)將繼承root 日誌記錄器(Logger) 的級別,root日誌記錄器(Logger)經常被例項化而可用,它的級別為DEBUG。
Level類中預定義了五個level,它們的大小關係如下:Level.ALL < Level.DEBUG < Level.INFO < Level.WARN < Level.ERROR < Level.FATAL < Level.OFF
 
三、log4cxx(log4j) Log layout介紹
 
org.apache.log4j.HTMLLayout(以HTML表格形式佈局), 
org.apache.log4j.PatternLayout(可以靈活地指定佈局模式), 
org.apache.log4j.SimpleLayout(包含日誌資訊的級別和資訊字串), 
org.apache.log4j.TTCCLayout(包含日誌產生的時間、執行緒、類別等等資訊)
 
 
四、log4cxx Log 格式化資訊介紹
 
Log4J採用類似C語言中的printf函式的列印格式格式化日誌資訊,列印引數如下: 
%m 輸出程式碼中指定的訊息 
%p 輸出優先順序,即DEBUG,INFO,WARN,ERROR,FATAL 
%r 輸出自應用啟動到輸出該log資訊耗費的毫秒數
%c 輸出所屬的類目,通常就是所在類的全名
%t 輸出產生該日誌事件的執行緒名 
%n 輸出一個回車換行符,Windows平臺為“rn”,Unix平臺為“n”
%d 輸出日誌時間點的日期或時間,預設格式為ISO8601,也可以在其後指定格式,比如:%d{yyyy MMM dd
HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921 %l 輸出日誌事件的發生位置,包括類目名
、發生的執行緒,以及在程式碼中的行數。
 
五、log4cxx Log appender種類介紹
 
Log4cXX提供的appender種類:
org.apache.log4j.ConsoleAppender 控制檯
org.apache.log4j.DailyRollingFileAppender 每天產生一個日誌檔案
org.apache.log4j.FileAppender 檔案org.apache.log4j.RollingFileAppender 檔案大小達到指定尺寸的
時候產生一個新的檔案
 
六、log4cxx Log Filter介紹
 
包括選擇過濾器和設定過濾條件,可選擇的過濾器包括:LogLevelMatchFilter、LogLevelRangeFilter、和 StringMatchFilter:
1、對LogLevelMatchFilter來說,過濾條件包括LogLevelToMatch和AcceptOnMatch(true|false), 只有 當log資訊的LogLevel值與LogLevelToMatch相同,且AcceptOnMatch為true時才會匹配。
2、對LogLevelRangeFilter來說,過濾條件包括LogLevelMin、LogLevelMax和AcceptOnMatch,只有當log信 息的LogLevel在LogLevelMin、LogLevelMax之間同時AcceptOnMatch為true時才會匹配。
3、對StringMatchFilter來說,過濾條件包括StringToMatch和AcceptOnMatch,只有當log資訊的LogLevel 值與StringToMatch對應的LogLevel值與相同, 且AcceptOnMatch為true時會匹配。
 
七、log4cxx additivity屬性介紹
 
它是 子Logger 是否繼承 父Logger 的 輸出源(appender) 的標誌位。具體說,預設情況下子Logger會繼承父Logger的appender,也就是說子Logger會在父Logger的appender裡輸 出。若是additivity設為false,則子Logger只會在自己的appender裡輸出,而不會在父Logger的appender裡輸 出。
 
 
八、log4cxx中XML檔案範例
 
 
九、log4cxx編譯
 
 
 
 

 

相關文章