青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

開源日志系統log4cplus(六)

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: 0xbfffe5a0
plogger2: 0xbfffe580
				
從結果可以看出,明明是同一個Logger,但每次調用都會產生一個Logger副本,雖然結果是正確的(因為將存
儲和操作分開了),但是資源有些浪費,我看了一下log4cplus的代碼,其實可以按照如下方式實現(示意性
的):
#include <iostream>
#include <string>
#include <map>
/* forward declaration */
class Logger;
class LoggerContainer
{
public:
??? ~LoggerContainer();
??? Logger * getinstance(const std::string & strLogger);
private:
??? typedef std::map<:string,> LoggerMap;
??? LoggerMap loggerPtrs;
};
class Logger
{
public:
???? Logger() {std::cout << "ctor of Logger " << std::endl; }
??? ~Logger() {std::cout << "dtor of Logger " << std::endl; }
??? static Logger * getInstance( const std::string & strLogger)
??? {
??????? static LoggerContainer defaultLoggerContainer;
??????? return defaultLoggerContainer.getinstance(strLogger);
??? }
};
LoggerContainer::~LoggerContainer()
{
??? /* release all ptr in LoggerMap */
??? LoggerMap::iterator itr = loggerPtrs.begin();
??? for( ; itr != loggerPtrs.end(); ++itr )
?{
???? delete (*itr).second;
?}
}
Logger * LoggerContainer::getinstance(const std::string & strLogger)
{
?? LoggerMap::iterator itr = loggerPtrs.find(strLogger);
?? if(itr != loggerPtrs.end())
?? {
?????? /* logger exist, just return it */
?????? return (*itr).second;
?? }
?? else
?? {
?????? /* return a new logger */
?????? Logger * plogger = new Logger();
?????? loggerPtrs.insert(std::make_pair(strLogger, plogger));
?????? return plogger;
?? }
}
int main()
{
??? Logger * plogger1 = Logger::getInstance("test");
??? Logger * plogger2 = Logger::getInstance("test");
??? std::cout << "plogger1: " << plogger1 << std::endl << "plogger2: " << plogger2 << std::endl;
??? return 0;
}
				
運行結果:
ctor of Logger
plogger1: 0x804fc30
plogger2: 0x804fc30
dtor of Logger
這里的LoggerContainer相當于log4cplus中的Hierarchy類,結果可以看出,通過同一個名稱可以獲取相同的
Logger實例。
				
還有一些小毛病比如RollingFileAppender和DailyRollingFileAppender的參數輸入順序可以調整成統一方式
等等,就不細說了。
本部分提到了使用log4cplus時候感覺不爽的地方,最后一部分將介紹一下log4cplus中線程和套接字實現情況

posted on 2006-08-26 04:50 楊粼波 閱讀(3101) 評論(0)  編輯 收藏 引用 所屬分類: Windows編程Linux編程

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            性欧美xxxx视频在线观看| 午夜视频精品| 午夜伦理片一区| 亚洲视频视频在线| 一区二区欧美在线| 亚洲天堂黄色| 久久国产精品网站| 亚洲第一中文字幕| 女人香蕉久久**毛片精品| 免费在线观看日韩欧美| 亚洲黄色尤物视频| 日韩一区二区免费高清| 一二美女精品欧洲| 欧美在线观看你懂的| 久久综合一区| 欧美日韩精品久久久| 国产精品美女久久久免费| 狠狠久久婷婷| 日韩视频中午一区| 久久www免费人成看片高清 | 老牛国产精品一区的观看方式| 久久亚洲捆绑美女| 亚洲高清不卡在线观看| 在线亚洲电影| 久久久国产精品一区二区中文 | 国产午夜精品在线观看| 91久久国产综合久久91精品网站| 在线亚洲观看| 久久综合色88| 亚洲制服av| 欧美成年网站| 国产一区 二区 三区一级| 亚洲人成7777| 久久免费观看视频| 亚洲一二三四区| 欧美成人在线网站| 黑人一区二区| 久久激情视频| 日韩午夜免费视频| 男女精品网站| 韩日成人av| 欧美一区在线视频| 亚洲精品视频免费观看| 狂野欧美一区| 欧美一区二区三区四区高清| 欧美华人在线视频| 一色屋精品视频免费看| 午夜欧美大尺度福利影院在线看| 亚洲成色www8888| 欧美资源在线观看| 国产日韩精品视频一区二区三区| 亚洲图中文字幕| 亚洲精品资源| 欧美激情国产高清| 亚洲欧洲日韩综合二区| 欧美 日韩 国产一区二区在线视频| 亚洲一区二区三区在线看 | 久久精品在这里| 国产精品私房写真福利视频| 在线亚洲自拍| 亚洲精品免费在线播放| 男人插女人欧美| 亚洲久久成人| 亚洲精品欧美精品| 欧美理论电影在线播放| 一本色道婷婷久久欧美| 日韩图片一区| 国产精品自拍一区| 久久精品免费| 欧美在线影院| 在线日韩中文字幕| 亚洲国产精品va| 欧美日本一区二区高清播放视频| aa亚洲婷婷| 一本色道久久综合亚洲精品高清| 欧美日韩一区精品| 午夜视频精品| 久久精品成人| 亚洲国产日韩一区二区| 91久久精品国产| 欧美日韩另类字幕中文| 亚洲免费在线播放| 欧美一区成人| 亚洲人成久久| 亚洲欧美另类在线观看| 国产一区二区三区电影在线观看| 老司机精品福利视频| 欧美二区在线观看| 亚洲在线观看视频网站| 性久久久久久久| 亚洲精品婷婷| 午夜精品久久久久久久蜜桃app | 亚洲高清视频的网址| 91久久香蕉国产日韩欧美9色 | 在线观看欧美黄色| 亚洲人成人99网站| 国产嫩草影院久久久久 | 亚洲久久在线| 一区二区三区国产精华| 国产精品一区久久久| 免播放器亚洲一区| 欧美午夜在线一二页| 久久这里只有| 国产精品国产精品| 欧美国产第二页| 国产精品一级| 亚洲国产高清在线| 国产欧美日韩精品丝袜高跟鞋 | 宅男噜噜噜66一区二区66| 欧美在线观看你懂的| 亚洲网站在线| 久热综合在线亚洲精品| 欧美伊人久久大香线蕉综合69| 免费成人在线观看视频| 性欧美video另类hd性玩具| 欧美激情视频给我| 久久精品首页| 国产精品一区二区男女羞羞无遮挡 | 国产精品swag| 亚洲第一主播视频| 狠狠色综合色综合网络| 中文日韩在线视频| 一区二区高清视频| 免费国产自线拍一欧美视频| 欧美影片第一页| 国产精品v欧美精品v日韩精品| 亚洲国产精品久久久久秋霞不卡| 国内偷自视频区视频综合| 亚洲欧美日韩精品综合在线观看| 亚洲最黄网站| 欧美激情视频在线播放| 亚洲国产老妈| 亚洲日本乱码在线观看| 另类激情亚洲| 免费在线一区二区| 在线观看精品| 欧美aaaaaaaa牛牛影院| 欧美国产一区视频在线观看| 伊人成人网在线看| 久久资源在线| 欧美黑人国产人伦爽爽爽| 亚洲国产aⅴ天堂久久| 久久视频免费观看| 欧美成人一品| 亚洲精品综合久久中文字幕| 欧美韩日一区| 一本色道久久综合亚洲精品按摩| 亚洲视频日本| 国产偷国产偷亚洲高清97cao| 亚洲欧美自拍偷拍| 久久人人97超碰国产公开结果| 精品69视频一区二区三区| 久久视频国产精品免费视频在线| 欧美激情中文字幕一区二区| 91久久综合| 欧美视频一区二区三区…| 亚洲一区二区在线免费观看| 久久xxxx| 伊人久久亚洲热| 欧美激情综合亚洲一二区 | 欧美成人一品| 日韩视频二区| 国产精品久久网站| 欧美自拍偷拍午夜视频| 欧美黄免费看| 亚洲欧美日本在线| 国内不卡一区二区三区| 欧美激情精品久久久久| 亚洲视频电影在线| 久久香蕉国产线看观看网| 亚洲精品色婷婷福利天堂| 欧美午夜欧美| 久久av资源网| 亚洲伦理网站| 久久久综合网站| 在线天堂一区av电影| 国产一区二区三区四区在线观看 | 亚洲精品欧美激情| 久久久精品视频成人| 亚洲精品一区二区在线| 国产欧美日韩亚洲精品| 欧美刺激午夜性久久久久久久| 亚洲一二三四区| 91久久黄色| 老司机精品久久| 欧美一区二区日韩一区二区| 亚洲久久视频| 国产视频在线一区二区| 欧美久久视频| 久久国产欧美日韩精品| 日韩视频免费观看高清完整版| 国产日韩欧美精品一区| 欧美精品黄色| 美女精品自拍一二三四| 亚洲欧美激情诱惑| 亚洲一区二区欧美日韩| 亚洲精品一区二区三区婷婷月 | 欧美在线免费观看视频| 一区二区三区毛片| 亚洲人成毛片在线播放女女|