log4cplus在很多方面做的都很出色,但是使用過程有些地方感覺不爽。在繼續吹捧之前我先把不爽之處
稍微提一提,然後繼續介紹關於執行緒和套接字的知識。
### 一些可以改進之處 ###
1. 使用者自定義loglevel的實現機制不夠開放
在第五篇中曾經介紹過如何實現使用者自行定義loglevel,為了實現比較理想的效果,甚至還需要改log4cplus的源**。:(
2. 生成logger物件的機制可以改進
我在使用時候,經常需要在不同的檔案、函式中操作同乙個logger,雖然log4cplus實現了樹狀儲存以及根據名稱生成logger,卻沒有充分利用這樣的特點確保同乙個名稱對應的logger物件的唯一性,比如以下**:
... ...logger logger1 = logger::getinstance("test");
logger logger2 = logger::getinstance("test");
logger * plogger1 = &logger1;logger * plogger2 = &logger2;
std::cout << "plogger1: " << plogger1 << std::endl << "plogger2: " << plogger2 << std::endl;... ...
執行結果:
plogger1: 0xbfffe5a0plogger2: 0xbfffe580
從結果可以看出,明明是同乙個logger,但每次呼叫都會產生乙個logger副本,雖然結果是正確的(因為將存
儲和操作分開了),但是資源有些浪費,我看了一下log4cplus的**,其實可以按照如下方式實現(示意性
的):
#include#include
#include
/* forward declaration */class logger;
class loggercontainer;
class logger~logger()
static logger * getinstance( const std::string & strlogger)};
loggercontainer::~loggercontainer()
}
logger * loggercontainer::getinstance(const std::string & strlogger)else
}
int main()
執行結果:
ctor of loggerplogger1: 0x804fc30
plogger2: 0x804fc30
dtor of logger
這裡的loggercontainer相當於log4cplus中的hierarchy類,結果可以看出,通過同乙個名稱可以獲取相同的logger例項。
本部分提到了使用log4cplus時候感覺不爽的地方,最後一部分將介紹一下log4cplus中線程和套接字實現情況
開源日誌系統 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...