淺談C++日志系統(tǒng)log4cxx的使用小結(jié)詳解
更新時間:2013年05月16日 16:39:30 作者:
本篇文章是對C++日志系統(tǒng)log4cxx的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
本文主要從log4cxx級別、layout、格式化、命名規(guī)則、Filter幾個方面介紹。
一、log4cxx命名規(guī)則
Logger由一個String類的名字識別,logger的名字是大小寫敏感的,且名字之間具有繼承的關(guān)系,子名有父名作為前綴,用點(diǎn)號.分隔。如:x.y是x.y.z的父親。根logger (root logger)是所有l(wèi)ogger的祖先, 它具有如下屬性:1) 它總是存在的;2) 它不可以通過名字獲得。通過調(diào)用public static Logger Logger.getRootLogger()獲得root logger;通過調(diào)用public static Logger Logger.getLogger(String name)或者public static Logger Logger.getLogger(Class clazz)獲得或者創(chuàng)建)一個named logger。后者相當(dāng)于調(diào)用Logger.getLogger(clazz.getName())。在某對象中,用該對象所屬的類為參數(shù),調(diào)用Logger.getLogger(Class clazz)以獲得logger被認(rèn)為是目前 所知的最理智的命名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越詳細(xì) 2、logging request的 level越高,表示該logging request越優(yōu)先輸出 3、如果沒有設(shè)置日志記錄器(Logger)的級別,那么它將 會繼承最近的祖先的級別。因此,如果在包c(diǎn)om.foo.bar中創(chuàng)建一個日志記錄器(Logger)并且沒有設(shè)置級 別,那它將會繼承在包c(diǎn)om.foo中創(chuàng)建的日志記錄器(Logger)的級別。如果在com.foo中沒有創(chuàng)建日志記錄 器(Logger)的話,那么在com.foo.bar中創(chuàng)建的日志記錄器(Logger)將繼承root 日志記錄器(Logger) 的級別,root日志記錄器(Logger)經(jīng)常被實(shí)例化而可用,它的級別為DEBUG。
Level類中預(yù)定義了五個level,它們的大小關(guān)系如下: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(包含日志產(chǎn)生的時間、線程、類別等等信息)
四、log4cxx Log 格式化信息介紹
Log4J采用類似C語言中的printf函數(shù)的打印格式格式化日志信息,打印參數(shù)如下:
%m 輸出代碼中指定的消息
%p 輸出優(yōu)先級,即DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL
%r 輸出自應(yīng)用啟動到輸出該log信息耗費(fèi)的毫秒數(shù)
%c 輸出所屬的類目,通常就是所在類的全名
%t 輸出產(chǎn)生該日志事件的線程名
%n 輸出一個回車換行符,Windows平臺為“rn”,Unix平臺為“n”
%d 輸出日志時間點(diǎn)的日期或時間,默認(rèn)格式為ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd
HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921 %l 輸出日志事件的發(fā)生位置,包括類目名
、發(fā)生的線程,以及在代碼中的行數(shù)。
五、log4cxx Log appender種類介紹
Log4cXX提供的appender種類:
org.apache.log4j.ConsoleAppender 控制臺
org.apache.log4j.DailyRollingFileAppender 每天產(chǎn)生一個日志文件
org.apache.log4j.FileAppender 文件org.apache.log4j.RollingFileAppender 文件大小達(dá)到指定尺寸的
時候產(chǎn)生一個新的文件
六、log4cxx Log Filter介紹
包括選擇過濾器和設(shè)置過濾條件,可選擇的過濾器包括:LogLevelMatchFilter、LogLevelRangeFilter、和 StringMatchFilter:
1、對LogLevelMatchFilter來說,過濾條件包括LogLevelToMatch和AcceptOnMatch(true|false),只有 當(dāng)log信息的LogLevel值與LogLevelToMatch相同,且AcceptOnMatch為true時才會匹配。
2、對LogLevelRangeFilter來說,過濾條件包括LogLevelMin、LogLevelMax和AcceptOnMatch,只有當(dāng)log信 息的LogLevel在LogLevelMin、LogLevelMax之間同時AcceptOnMatch為true時才會匹配。
3、對StringMatchFilter來說,過濾條件包括StringToMatch和AcceptOnMatch,只有當(dāng)log信息的LogLevel 值與StringToMatch對應(yīng)的LogLevel值與相同,且AcceptOnMatch為true時會匹配。
七、log4cxx additivity屬性介紹
它是 子Logger 是否繼承 父Logger 的 輸出源(appender)的標(biāo)志位。具體說,默認(rèn)情況下子Logger會繼承父Logger的appender,也就是說子Logger會在父Logger的appender里輸 出。若是additivity設(shè)為false,則子Logger只會在自己的appender里輸出,而不會在父Logger的appender里輸 出。
一、log4cxx命名規(guī)則
Logger由一個String類的名字識別,logger的名字是大小寫敏感的,且名字之間具有繼承的關(guān)系,子名有父名作為前綴,用點(diǎn)號.分隔。如:x.y是x.y.z的父親。根logger (root logger)是所有l(wèi)ogger的祖先, 它具有如下屬性:1) 它總是存在的;2) 它不可以通過名字獲得。通過調(diào)用public static Logger Logger.getRootLogger()獲得root logger;通過調(diào)用public static Logger Logger.getLogger(String name)或者public static Logger Logger.getLogger(Class clazz)獲得或者創(chuàng)建)一個named logger。后者相當(dāng)于調(diào)用Logger.getLogger(clazz.getName())。在某對象中,用該對象所屬的類為參數(shù),調(diào)用Logger.getLogger(Class clazz)以獲得logger被認(rèn)為是目前 所知的最理智的命名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越詳細(xì) 2、logging request的 level越高,表示該logging request越優(yōu)先輸出 3、如果沒有設(shè)置日志記錄器(Logger)的級別,那么它將 會繼承最近的祖先的級別。因此,如果在包c(diǎn)om.foo.bar中創(chuàng)建一個日志記錄器(Logger)并且沒有設(shè)置級 別,那它將會繼承在包c(diǎn)om.foo中創(chuàng)建的日志記錄器(Logger)的級別。如果在com.foo中沒有創(chuàng)建日志記錄 器(Logger)的話,那么在com.foo.bar中創(chuàng)建的日志記錄器(Logger)將繼承root 日志記錄器(Logger) 的級別,root日志記錄器(Logger)經(jīng)常被實(shí)例化而可用,它的級別為DEBUG。
Level類中預(yù)定義了五個level,它們的大小關(guān)系如下: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(包含日志產(chǎn)生的時間、線程、類別等等信息)
四、log4cxx Log 格式化信息介紹
Log4J采用類似C語言中的printf函數(shù)的打印格式格式化日志信息,打印參數(shù)如下:
%m 輸出代碼中指定的消息
%p 輸出優(yōu)先級,即DEBUG,INFO,WARN,ERROR,F(xiàn)ATAL
%r 輸出自應(yīng)用啟動到輸出該log信息耗費(fèi)的毫秒數(shù)
%c 輸出所屬的類目,通常就是所在類的全名
%t 輸出產(chǎn)生該日志事件的線程名
%n 輸出一個回車換行符,Windows平臺為“rn”,Unix平臺為“n”
%d 輸出日志時間點(diǎn)的日期或時間,默認(rèn)格式為ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd
HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921 %l 輸出日志事件的發(fā)生位置,包括類目名
、發(fā)生的線程,以及在代碼中的行數(shù)。
五、log4cxx Log appender種類介紹
Log4cXX提供的appender種類:
org.apache.log4j.ConsoleAppender 控制臺
org.apache.log4j.DailyRollingFileAppender 每天產(chǎn)生一個日志文件
org.apache.log4j.FileAppender 文件org.apache.log4j.RollingFileAppender 文件大小達(dá)到指定尺寸的
時候產(chǎn)生一個新的文件
六、log4cxx Log Filter介紹
包括選擇過濾器和設(shè)置過濾條件,可選擇的過濾器包括:LogLevelMatchFilter、LogLevelRangeFilter、和 StringMatchFilter:
1、對LogLevelMatchFilter來說,過濾條件包括LogLevelToMatch和AcceptOnMatch(true|false),只有 當(dāng)log信息的LogLevel值與LogLevelToMatch相同,且AcceptOnMatch為true時才會匹配。
2、對LogLevelRangeFilter來說,過濾條件包括LogLevelMin、LogLevelMax和AcceptOnMatch,只有當(dāng)log信 息的LogLevel在LogLevelMin、LogLevelMax之間同時AcceptOnMatch為true時才會匹配。
3、對StringMatchFilter來說,過濾條件包括StringToMatch和AcceptOnMatch,只有當(dāng)log信息的LogLevel 值與StringToMatch對應(yīng)的LogLevel值與相同,且AcceptOnMatch為true時會匹配。
七、log4cxx additivity屬性介紹
它是 子Logger 是否繼承 父Logger 的 輸出源(appender)的標(biāo)志位。具體說,默認(rèn)情況下子Logger會繼承父Logger的appender,也就是說子Logger會在父Logger的appender里輸 出。若是additivity設(shè)為false,則子Logger只會在自己的appender里輸出,而不會在父Logger的appender里輸 出。
相關(guān)文章
C語言數(shù)組長度的計算方法實(shí)例總結(jié)(sizeof與strlen)
數(shù)組一旦創(chuàng)建,程序運(yùn)行期間,長度不可改變,下面這篇文章主要給大家介紹了關(guān)于C語言數(shù)組長度的計算方法,主要利用的是sizeof與strlen,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06詳解C語言中freopen()函數(shù)和fclose()函數(shù)的用法
這篇文章主要介紹了詳解C語言中freopen()函數(shù)和fclose()函數(shù)的用法,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-08-08C語言實(shí)現(xiàn)YUV文件轉(zhuǎn)JPEG格式
這篇文章主要為大家詳細(xì)介紹了如何利用C語言實(shí)現(xiàn)將YUV文件轉(zhuǎn)為JPEG格式,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12C語言鏈表實(shí)現(xiàn)學(xué)生成績管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語言鏈表實(shí)現(xiàn)學(xué)生成績管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-07-07