歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Log4c配置詳細筆記

Log4c配置詳細筆記

日期:2017/3/1 10:07:07   编辑:Linux編程

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);
   }
}

Copyright © Linux教程網 All Rights Reserved