開源日誌系統 log4cplus 四

2021-04-21 22:08:06 字數 2431 閱讀 5497

將log資訊記錄到檔案應該說是日誌系統的乙個基本功能,log4cplus在此基礎上,提供了更多的功能,可以按照你預先設定的大小來決定是否轉儲,當超過該大小,後續log資訊會另存到新檔案中,依次類推;或者按照日期來決定是否轉儲。本文將詳細介紹這些用法。

### 如何將log記錄到檔案 ###

實現了基本的檔案操作功能,建構函式如下:

log4cplus_open_mode_type mode = log4cplus_fstream_namespace::ios::trunc,

bool immediateflush = true);

filename       : 檔名

stl的乙個簡單包裝,呵呵,這裡就不多講了。預設是trunc,表示將先前檔案刪除。

被關閉或檔案快取已滿才更新檔案,一般是要設定true的,比如你往檔案寫的過程中出現

了錯誤(如程式非正常退出),即使檔案沒有正常關閉也可以保證程式終止時刻之前的所有

記錄都會被正常儲存。

建構函式如下:

long maxfilesize,

int maxbackupindex,

bool immediateflush)

filename       : 檔名

maxfilesize    : 檔案的最大尺寸

maxbackupindex : 最大記錄檔案數

immediateflush : 緩衝重新整理標誌

這樣的記錄檔案(maxbackupindex+1),當儲存的檔案數目超過maxbackupindex+1時,會刪除最早生成的檔案,

保證整個檔案數目等於maxbackupindex+1。然後繼續記錄,比如以下**片段:

... ...

#define loop_count 200000

(new ttcclayout()) );

logger root = logger::getroot();

logger test = logger::getinstance("test");

logger subtest = logger::getinstance("test.subtest");

for(int i=0; i   

... ...

執行結果:

執行後會產生6個輸出檔案,test.log、test.log.1、test.log.2、test.log.3、test.log.4、test.log.5

其中test.log存放著最新寫入的資訊,而最後乙個檔案中並不包含第乙個寫入資訊,說明已經被不斷更新了。

需要指出的是,這裡除了test.log之外,每個檔案的大小都是200k,而不是我們想像中的5k,這是因為

log4cplus中隱含定義了檔案的最小尺寸是200k,只有大於200k的設定才生效,<= 200k的設定都會被認為是

200k.

建構函式如下:

dailyrollingfileschedule schedule,

bool immediateflush,

int maxbackupindex)

filename       : 檔名

schedule       : 儲存頻度

immediateflush : 緩衝重新整理標誌

maxbackupindex : 最大記錄檔案數

到新檔案中,這裡的頻度包括:monthly(每月)、weekly(每週)、daily(每日)、twice_daily(每兩天)、

hourly(每時)、minutely(每分)。maxbackupindex的含義同上所述,比如以下**片段:

... ...

(new ttcclayout()) );

logger root = logger::getroot();

logger test = logger::getinstance("test");

logger subtest = logger::getinstance("test.subtest");

for(int i=0; i   

... ...

執行結果:

執行後會以分鐘為單位,分別生成名為test.log.2004-10-17-03-03、test.log.2004-10-17-03-04和

test.log.2004-10-17-03-05這樣的檔案。

需要指出的是,剛看到按照頻度(如hourly、minutely)轉儲這樣的概念,以為log4cplus提供了內部定時器,

感覺很奇怪,因為日誌系統不應該主動記錄,而loging事件總是應該被動觸發的啊。仔細看了源**後才知道

這裡的"頻度"並不是你寫入檔案的速度,其實是否轉儲的標準並不依賴你寫入檔案的速度,而是依賴於寫入

的那一時刻是否滿足了頻度條件,即是否超過了以分鐘、小時、周、月為單位的時間刻度,如果超過了就另存。

本部分詳細介紹log資訊的幾種檔案操作方式,下面將重點介紹一下如何有選擇地控制log資訊的輸出。

開源日誌系統 log4cplus 二

本文介紹了使用log4cplus有六個步驟,並提供了一些例子引導你了解log4cplus的基本使用。基本使用 使用log4cplus有六個基本步驟 下面通過一些例子來了解log4cplus的基本使用。using namespace log4cplus using namespace log4cplu...

開源日誌系統 log4cplus 七

經過短暫的熟悉過程,log4cplus已經被成功應用到了我的專案中去了,效果還不錯,除了上文提及的 功能之外,下面將介紹log4cplus提供的執行緒和套接字的使用情況。ndc 首先我們先了解一下log4cplus中嵌入診斷上下文 nested diagnostic context 即ndc。對lo...

開源日誌系統 log4cplus 六

一些可以改進之處 1.使用者自定義loglevel的實現機制不夠開放在第五篇中曾經介紹過如何實現使用者自行定義loglevel,為了實現比較理想的效果,甚至還需要改log4cplus 的源 2.生成logger物件的機制可以改進我在使用時候,經常需要在不同的檔案 函式中操作同乙個logger,雖然l...