1.Log工具簡單比較
Log4cpp & Log4CPlus:C++的日志庫,可移植移性相對差些
Log4c:C的日志庫,基本上都是一些純c的東西,移植性較好
2.Log4c的基本概念
Log4c中有三個重要的概念, Category, Appender, Layout。
Category用於區分不同的日志,在一個程序中我們可以通過Category來指定很多的日志。
Appdender用於描述輸出流,通過為Category來指定一個Appdender,可以決定將log信息來輸出到什麼地方去,比如stdout, stderr, rollingfile等等。
Layout用於指定日志信息的格式,通過為Appender來指定一個Layout,可以決定log信息以何種格式來輸出,比如是否有帶有時間戳, 是否包含文件位置信息等,以及他們在一條log信息中的輸出格式的等。
Category, Appender, Layout三者之間的關系,一個Category需要為其指定一個appender, 一個appender亦要為其指定一個layout。
另外,對於文件類型輸出還有一個rollingpolicy。rollingpolicy用於描述文件輸出的配置策略。
3.關於配置
配置文件示例如下:
<!DOCTYPE log4c SYSTEM "">
<log4c version="1.2.0">
<config>
<bufsize>0</bufsize>
<debug level="0"/>
<nocleanup>0</nocleanup>
</config>
<layout name="dated" type="dated_l"/>
<!-- appenders ===================================== -->
<appender name="LoadBusinessLog" type="rollingfile" logdir="../etc/log"
prefix="LoadBusiness-" layout="dated_l" rollingpolicy="Policy1" />
<appender name="CataRollingFileAppender" type="rollingfile" logdir="../etc/log/"
prefix="testLog" layout="dated" rollingpolicy="RollingPolicy" />
<!-- category ========================================= -->
<category name="root" priority="notice"/>
<category name="framework" priority="info" appender="FrameLog" />
<category name="test.log" priority="trace" appender="CataRollingFileAppender" />
<!-- policy ======================================= -->
<rollingpolicy name="Policy1" type="timewin" timetype="1" maxnum="10" />
<rollingpolicy name="RollingPolicy" type="sizewin" maxsize="102400" maxnum="10" />
</log4c>
3.1 category
name:日志的名稱
priority:日志的優先級,共有fatal、alert、crit、error、warn、notice、info、debug、trace、notset和unknown11個級別,其級別逐步遞增,記錄在日志中的數據為小於等於指定級別的數據。
appender:輸出流類型名稱,為appender節點的name屬性的值。
3.2 appender
name:輸出流名稱
type:輸出流類型,共有stream、syslog、rollingfile三大類
layout:輸出日志的格式的名稱,為layout節點的name屬性的值。
rollingpolicy:輸出日志文件配置策略名稱,為rollingpolicy節點的name屬性的值。
rollingpolicy的timewin類型的日志輸出為自定義類型
3.3 layout
name:輸出日志的格式名稱
type:輸出日志格式的類型,共有base 、dated、dated_l等格式類型,對於自定義類型也有配置在這裡,否則不能夠加載。
base:%P %c - %m/n
"%P" 日志信息的優先級
"%c" 日志的名稱
"%m" 日志信息內容
dated:%d %P %c - %m/n
"%d" 日志信息產生的時間,UTC格式yyyymmdd hh:mm:ss.mis
"%P" 日志信息的優先級
"%c" 日志的名稱
"%m" 日志信息內容
dated_l:%d %P %c - %m/n (源代碼裡面沒有,自己增加的)
"%d" 日志信息產生的時間,本地時間格式yyyymmdd hh:mm:ss
"%P" 日志信息的優先級
"%c" 日志的名稱
"%m"日志信息內容
3.4 rollingpolicy
name:日志文件輸出的配置策略名稱。
type:日志文件輸出的配置策略的類型,有sizewin一種類型。
maxsize:輸出日志文件的最大值。默認值為20KB
maxnum:保存的歷史日志文件總數。默認值為5
3.5 配置文件的路徑 :
${ LOG4C_RCPATH }/log4crc //環境變量中設置的配置文件夾下log4crc
${HOME}/.log4crc //HOME文件夾下log4crc
./log4crc //當前可執行文件夾下log4crc
4、Log4c的基本使用
頭文件 (直接引用log4c.h程序編譯出錯,因此只引用需要的頭文件)
extern "C" {
#include <log4c/init.h>
#include <log4c/category.h>
}
cpp文件
//初始化
log4c_init();
//獲取一個已有的category
log4c_category_t* mycat = log4c_category_get("cata.log ");
//用該category進行日志輸出,優先級為DEBUG,輸出信息為 "Hello World!"
log4c_category_log(mycat, LOG4C_PRIORITY_DEBUG, "Hello World!");
//析構
log4c_fini();
//在日志輸出過程中可以進行格式化輸出:
log4c_category_log(mycat, LOG4C_PRIORITY_ERROR, "Error code = %d", 12345);
//對於格式化輸出也可以有如下寫法:
void CLog::Trace(const char * format, ... )
{
if (log4c_category_is_priority_enabled(mycat, LOG4C_PRIORITY_TRACE))
{
a_list argptr;
va_start(argptr, format);
log4c_category_vlog(mycat, LOG4C_PRIORITY_TRACE, format, argptr);
va_end(argptr);
}
}