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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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>
            亚洲影院色无极综合| 欧美福利精品| 亚洲国产人成综合网站| 销魂美女一区二区三区视频在线| 一区二区欧美亚洲| 亚洲图片欧美一区| 性久久久久久久久久久久| 欧美一区二区精品在线| 性高湖久久久久久久久| 欧美一区二区三区久久精品茉莉花| 欧美亚洲在线| 毛片一区二区三区| 亚洲精品偷拍| 亚洲影音一区| 久久夜色精品亚洲噜噜国产mv| 蜜臀久久99精品久久久画质超高清| 久久久久久久久伊人| 欧美一级在线播放| 欧美 日韩 国产一区二区在线视频 | 国产午夜精品美女视频明星a级| 亚洲国产精品一区制服丝袜| 在线看欧美视频| 一本色道久久综合狠狠躁篇怎么玩 | 欧美日韩综合视频| 国产一区二区毛片| 99re8这里有精品热视频免费| 午夜久久tv| 亚洲国产高清一区| 亚洲永久免费观看| 欧美成人精品福利| 国产热re99久久6国产精品| 亚洲欧洲一区二区三区久久| 午夜在线成人av| 亚洲激情图片小说视频| 欧美自拍偷拍午夜视频| 欧美三区不卡| 最新亚洲电影| 久久久午夜精品| 亚洲午夜国产一区99re久久| 亚洲一区中文| 欧美激情在线有限公司| 亚洲欧美一区二区视频| 欧美激情四色| 在线看欧美日韩| 久久精品欧美日韩| 在线视频欧美日韩精品| 欧美国产日产韩国视频| 在线观看日产精品| 久久精品国产第一区二区三区最新章节 | 亚洲高清免费| 久久久夜夜夜| 国内精品久久久久久久果冻传媒| 亚洲中午字幕| 9久re热视频在线精品| 欧美成人激情在线| 91久久久久久| 亚洲成人资源网| 久久视频一区二区| 精品福利免费观看| 悠悠资源网亚洲青| 久久精品成人一区二区三区 | 免费观看成人鲁鲁鲁鲁鲁视频| 国产夜色精品一区二区av| 亚洲综合三区| 一区二区日韩伦理片| 欧美日韩中文字幕精品| 亚洲无线一线二线三线区别av| 亚洲免费福利视频| 欧美性色视频在线| 欧美在线网址| 久久久久久久成人| 亚洲激情校园春色| 亚洲区在线播放| 国产精品v亚洲精品v日韩精品 | 久久综合一区| 亚洲国产天堂网精品网站| 亚洲国产精品日韩| 欧美三级第一页| 性欧美xxxx视频在线观看| 午夜精品免费在线| 伊人久久男人天堂| 亚洲欧洲日本mm| 国产精品扒开腿爽爽爽视频| 午夜国产不卡在线观看视频| 亚洲欧洲99久久| 在线日韩欧美视频| 亚洲激情综合| 国产精品综合网站| 女人色偷偷aa久久天堂| 欧美日韩mv| 黄色成人免费观看| 免费人成网站在线观看欧美高清| 久久亚洲电影| 国产精品99久久久久久有的能看| 亚洲午夜精品国产| 国内久久婷婷综合| 亚洲丶国产丶欧美一区二区三区 | 欧美一区国产在线| 亚洲精品国产品国语在线app| 9l视频自拍蝌蚪9l视频成人| 国产一区在线视频| 亚洲美女精品成人在线视频| 国产一区二区高清不卡| 亚洲片国产一区一级在线观看| 国产精品视频区| 亚洲成人在线网站| 国产亚洲一区二区三区在线观看| 亚洲国产国产亚洲一二三| 国产精品视频在线观看| 欧美成人免费在线观看| 国产精品女主播在线观看| 欧美国产日韩一区| 国产麻豆一精品一av一免费| 亚洲国产日韩欧美在线动漫| 国产日韩欧美亚洲一区| 99精品国产福利在线观看免费| 精品99一区二区三区| 亚洲一区视频在线| 99精品久久久| 欧美成人亚洲| 欧美电影专区| 伊大人香蕉综合8在线视| 亚洲综合精品四区| 亚洲先锋成人| 欧美日韩三级一区二区| 亚洲国产综合在线看不卡| 一区二区三区在线免费播放| 亚洲综合视频一区| 亚洲综合色噜噜狠狠| 欧美日韩国产综合在线| 欧美激情欧美狂野欧美精品| 黄色日韩在线| 欧美中文字幕精品| 久久国产直播| 国产亚洲毛片| 欧美一区二区在线视频| 久久精品国产久精国产思思| 国产精品影音先锋| 午夜精品在线看| 久久精品国产欧美激情| 国产午夜精品福利| 久久精品欧美日韩| 美女尤物久久精品| 亚洲高清色综合| 欧美sm视频| 亚洲肉体裸体xxxx137| 日韩写真视频在线观看| 欧美精品一区二区视频| 亚洲美女中出| 亚洲欧美国产高清va在线播| 国产精品久久久久一区| 亚洲伊人色欲综合网| 久久精品毛片| 亚洲福利视频网| 欧美国产成人在线| 一本色道久久综合狠狠躁篇怎么玩| 国产精品自拍小视频| 亚洲男女毛片无遮挡| 久久人人九九| 亚洲黄色成人久久久| 欧美精品福利在线| 正在播放欧美视频| 久久青草福利网站| 亚洲精品美女免费| 国产精品美女黄网| 久久久噜噜噜久久中文字免| 亚洲国产精品ⅴa在线观看 | 午夜一区在线| 美日韩精品免费观看视频| 亚洲国产精品激情在线观看| 欧美久久久久久久| 亚洲欧美综合| 亚洲激情av| 久久高清国产| 99成人在线| 国产日韩一区二区三区在线播放 | 亚洲午夜在线观看视频在线| 国产一区二区激情| 欧美久久一级| 久久电影一区| 一区二区三区四区精品| 猫咪成人在线观看| 午夜免费电影一区在线观看| 亚洲风情在线资源站| 国产欧美一区二区精品性| 蜜臀a∨国产成人精品| 欧美一区二区大片| 99精品欧美一区二区三区| 美女视频黄a大片欧美| 香蕉免费一区二区三区在线观看| 亚洲片区在线| 黄色成人av网| 国产欧美日韩精品一区| 欧美手机在线视频| 欧美久久一区| 欧美激情视频一区二区三区免费| 久久www免费人成看片高清| 亚洲一区二区三区三| 亚洲伦理网站| 亚洲人被黑人高潮完整版|