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

牽著老婆滿街逛

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

開源日志系統log4cplus(二)

本文介紹了使用log4cplus有六個步驟,并提供了一些例子引導你了解log4cplus的基本使用。

				
### 基本使用 ###
使用log4cplus有六個基本步驟:
1. 實例化一個appender對象
2. 實例化一個layout對象
3. 將layout對象綁定(attach)到appender對象
4. 實例化一個logger對象,調用靜態函數:log4cplus::Logger::getInstance("logger_name")
5. 將appender對象綁定(attach)到logger對象,如省略此步驟,標準輸出(屏幕)appender對象會綁定到logger
6. 設置logger的優先級,如省略此步驟,各種有限級的消息都將被記錄
下面通過一些例子來了解log4cplus的基本使用。
〖例1〗
/*    嚴格實現步驟1-6,appender輸出到屏幕, 其中的布局格式和LogLevel后面會詳細解釋。*/
#include 
<log4cplus/logger.h>
#include 
<log4cplus/consoleappender.h>
#include 
<log4cplus/layout.h>
using namespace log4cplus;
using namespace log4cplus::helpers;
int main()
{
    
/* step 1: Instantiate an appender object */
    SharedObjectPtr _append (
new ConsoleAppender());
    _append
->setName("append for test");
    
/* step 2: Instantiate a layout object */
    std::
string pattern = "%d{%m/%d/%y %H:%M:%S}  - %m [%l]%n";
    std::auto_ptr _layout(
new PatternLayout(pattern));
    
/* step 3: Attach the layout object to the appender */
    _append
->setLayout( _layout );
    
/* step 4: Instantiate a logger object */
    Logger _logger 
= Logger::getInstance("test");
    
/* step 5: Attach the appender object to the logger  */
    _logger.addAppender(_append);
    
/* step 6: Set a priority for the logger  */
    _logger.setLogLevel(ALL_LOG_LEVEL);
     
/* log activity */ 
   LOG4CPLUS_DEBUG(_logger, 
"This is the FIRST log message")
    sleep(
1);
    LOG4CPLUS_WARN(_logger, 
"This is the SECOND log message")
    
return 0;
}

輸出結果:
10/14/04 09:06:24  - This is the FIRST log message... [main.cpp:31]
10/14/04 09:06:25  - This is the SECOND log message... [main.cpp:33]
				
〖例2〗
/*    簡潔使用模式,appender輸出到屏幕。*/
#include 
<log4cplus/logger.h>
#include 
<log4cplus/consoleappender.h>
using namespace log4cplus;
using namespace log4cplus::helpers;
int main()
{
    
/* step 1: Instantiate an appender object */
    SharedAppenderPtr _append(
new ConsoleAppender());
    _append
->setName("append test");
    
/* step 4: Instantiate a logger object */
    Logger _logger 
= Logger::getInstance("test");
    
/* step 5: Attach the appender object to the logger  */
    _logger.addAppender(_append);
    
/* log activity */
    LOG4CPLUS_DEBUG(_logger, 
"This is the FIRST log message")
    sleep(
1);
    LOG4CPLUS_WARN(_logger, 
"This is the SECOND log message")
    
return 0;
}

輸出結果:
DEBUG - This is the FIRST log message...
WARN - This is the SECOND log message...
				
〖例3〗
/*    iostream模式,appender輸出到屏幕。*/
#include 
<log4cplus/logger.h>
#include 
<log4cplus/consoleappender.h>
#include 
<iomanip> 
/* 其實這個東東還是放到log4cplus頭文件中比較合適些,個人意見:) */
using namespace log4cplus;
int main()
{
    
/* step 1: Instantiate an appender object */
 SharedAppenderPtr _append(
new ConsoleAppender()); 
   _append
->setName("append test");
    
/* step 4: Instantiate a logger object */
    Logger _logger 
= Logger::getInstance("test");
    
/* step 5: Attach the appender object to the logger  */ 
 _logger.addAppender(_append);
    
/* log activity */
   LOG4CPLUS_TRACE(_logger, 
"This is"  << " just a t" << "est." << std::endl) 
  LOG4CPLUS_DEBUG(_logger, 
"This is a bool: " << true
   LOG4CPLUS_INFO(_logger, 
"This is a char: " << 'x')
    LOG4CPLUS_WARN(_logger, 
"This is a int: " << 1000)
    LOG4CPLUS_ERROR(_logger, 
"This is a long(hex): " << std::hex << 100000000
 LOG4CPLUS_FATAL(_logger, 
"This is a double: "  << std::setprecision(15)  << 1.2345234234)
    
return 0;
}


輸出結果:
DEBUG - This is a bool: 1
INFO - This is a char: x
WARN - This is a int: 1000
ERROR - This is a long(hex): 5f5e100
FATAL - This is a double: 1.2345234234
				
〖例4〗
/*    調試模式,通過loglog來控制輸出調試、警告或錯誤信息,appender輸出到屏幕。*/
#include 
<iostream>
#include 
<log4cplus/helpers/loglog.h>
using namespace log4cplus::helpers;
void printMsgs(void)

   std::cout 
<< "Entering printMsgs()" << std::endl; 
   LogLog::getLogLog()
->debug("This is a Debug statement");
    LogLog::getLogLog()
->warn("This is a Warning");
    LogLog::getLogLog()
->error("This is a Error"); 
   std::cout 
<< "Exiting printMsgs()" << std::endl << std::endl;
}

int main()

   
/*       LogLog類實現了debug, warn, error 函數用于輸出調試、警告或錯誤信息,       同時提供了兩個方法來進一步控制所輸出的信息,其中:
       setInternalDebugging方法用來控制是否屏蔽輸出信息中的調試信息,當輸入參數為false則屏蔽,缺省設置為false。
       setQuietMode方法用來控制是否屏蔽所有輸出信息,當輸入參數為true則屏蔽,       缺省設置為false。
       LogLog::getLogLog()->setInternalDebugging(false);    
*/

    printMsgs();
    std::cout 
<< "Turning on debug" << std::endl;    LogLog::getLogLog()->setInternalDebugging(true);    printMsgs();
    std::cout 
<< "Turning on quiet mode" << std::endl; 
   LogLog::getLogLog()
->setQuietMode(true); 
   printMsgs();
    
return 0;
}

輸出結果:
Entering printMsgs()...
log4cplus:WARN This is a Warning...
log4cplus:ERROR This is a Error...
Exiting printMsgs()...
Turning on debug...
Entering printMsgs()...
log4cplus: This is a Debug statement...
log4cplus:WARN This is a Warning...
log4cplus:ERROR This is a Error...
Exiting printMsgs()...
Turning on quiet mode...
Entering printMsgs()...
Exiting printMsgs()...
需要指出的是,輸出信息中總是包含"log4cplus:"前綴,有時候會感覺不爽,這是因為LogLog在實現時候死定了要這么寫:
LogLog::LogLog() : mutex(LOG4CPLUS_MUTEX_CREATE),
   debugEnabled(
false),
   quietMode(
false),
   PREFIX( LOG4CPLUS_TEXT(
"log4cplus: ") ), 
  WARN_PREFIX( LOG4CPLUS_TEXT
"log4cplus:WARN ") ), 
  ERR_PREFIX( LOG4CPLUS_TEXT
"log4cplus:ERROR ") ){}
你可以把這些前綴換成自己看著爽的提示符號,然后重新編譯,hihi。除非萬不得已或者實在郁悶的不行,否則還是不要這樣干。
				
〖例5〗
/*    文件模式,appender輸出到文件。*/
#include <log4cplus/logger.h>
#include <log4cplus/fileappender.h>
using namespace log4cplus;
int main()
{    
/* step 1: Instantiate an appender object */
    SharedAppenderPtr _append(new FileAppender("Test.log"));
    _append
->setName("file log test");
    
/* step 4: Instantiate a logger object */
    Logger _logger = Logger::getInstance("test.subtestof_filelog");
    
/* step 5: Attach the appender object to the logger  */
    _logger.addAppender(_append);
    
/* log activity */
    int i;
    
for( i = 0; i < 5++i )
    {
        LOG4CPLUS_DEBUG(_logger, 
"Entering loop #" << i << "End line #")
    }
    
return 0;
}
輸出結果(Test.log文件):
DEBUG - Entering loop #0End line #
DEBUG - Entering loop #1End line #
DEBUG - Entering loop #2End line #
DEBUG - Entering loop #3End line #
DEBUG - Entering loop #4End line #

posted on 2006-08-26 04:49 楊粼波 閱讀(8292) 評論(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免费观看| 激情综合久久| 免费观看一区| 一区二区av在线| aⅴ色国产欧美| 亚洲永久在线观看| 亚洲欧美日韩国产一区二区| 日韩午夜剧场| 亚洲高清网站| 999亚洲国产精| 亚洲免费一在线| 欧美在线播放| 鲁大师影院一区二区三区| 欧美成人高清视频| 一区二区三区视频在线看| 午夜精彩国产免费不卡不顿大片| 亚洲色诱最新| 久久久久久久成人| 欧美精品一区视频| 国产精品丝袜久久久久久app| 国产视频一区欧美| 在线免费精品视频| 亚洲天堂久久| 久久成人av少妇免费| 欧美日本韩国一区| 欧美日韩午夜剧场| 国产视频精品网| 一区二区免费在线播放| 欧美在线看片| 亚洲精品麻豆| 羞羞视频在线观看欧美| 麻豆精品在线观看| 国产日韩在线不卡| 一区二区三区四区五区精品| 久久精品视频免费播放| 亚洲精品护士| 久久精品国产久精国产一老狼| 欧美精品自拍| 在线观看亚洲| 久久久久久久999| 一本在线高清不卡dvd| 麻豆国产精品777777在线| 国产欧美日韩亚洲精品| 亚洲影视在线播放| 亚洲美女中出| 欧美精品福利在线| 亚洲人妖在线| 欧美国产日韩xxxxx| 欧美在线免费看| 国产精品夜色7777狼人| 亚洲一区二区毛片| 亚洲老板91色精品久久| 欧美成人在线网站| 亚洲国产成人在线| 欧美成人第一页| 美女图片一区二区| 亚洲国产欧美精品| 欧美电影专区| 欧美韩日一区二区三区| 亚洲高清视频在线| 欧美亚洲色图校园春色| 欧美本精品男人aⅴ天堂| 欧美亚洲午夜视频在线观看| 欧美三级视频在线播放| 一区二区三区国产在线观看| 亚洲国产精品久久久久久女王| 久久精品在线播放| 伊人夜夜躁av伊人久久| 欧美肥婆在线| 老色鬼精品视频在线观看播放| 一区在线免费| 欧美激情导航| 欧美理论电影在线播放| 亚洲精品国久久99热| 亚洲精品1区2区| 欧美午夜精品一区| 羞羞答答国产精品www一本| 亚洲午夜激情网页| 国产欧美一区二区三区久久| 欧美自拍丝袜亚洲| 欧美一级在线亚洲天堂| 在线不卡视频| 亚洲精品久久在线| 国产欧美一区二区三区另类精品 | 国产精品视频99| 亚洲男人av电影| 欧美一区二区在线免费播放| 一区二区在线不卡| 亚洲第一精品在线| 欧美日韩视频在线观看一区二区三区 | 亚洲一区日本| 亚洲欧美一区二区激情| 影音国产精品| 日韩午夜在线播放| 韩国女主播一区| 亚洲国产婷婷| 国产精品揄拍500视频| 91久久久久久| 中日韩在线视频| 激情久久久久久久| 日韩一区二区免费高清| 国产亚洲aⅴaaaaaa毛片| 欧美成人亚洲成人| 国产精品久久久久久久久久妞妞| 久久综合伊人77777蜜臀| 欧美精品久久一区二区| 欧美一区二区在线播放| 男同欧美伦乱| 黄色av成人| 亚洲图片欧美日产| 亚洲日韩欧美视频| 久久国产精品电影| 欧美一级片在线播放| 欧美激情一区二区三区| 久久久久国色av免费观看性色| 亚洲欧洲综合另类| 狠狠操狠狠色综合网| 一区二区三区.www| 亚洲精品人人| 久久国产视频网站| 午夜精品影院| 欧美日韩精品免费观看| 欧美国产三区| 一区二区三区在线观看视频 | 亚洲欧美成人| 一区二区激情小说| 欧美电影电视剧在线观看| 乱码第一页成人| 娇妻被交换粗又大又硬视频欧美| 一区二区三区国产精品| 一区二区三区四区五区在线| 免费成人黄色av| 欧美国产高清| 亚洲高清在线播放| 免费中文字幕日韩欧美| 欧美成人免费视频| 在线播放亚洲一区| 久久亚洲春色中文字幕| 久久日韩精品| 韩国成人福利片在线播放| 亚洲嫩草精品久久| 久久成人18免费观看| 国产视频亚洲| 久久精品日韩| 欧美xx视频| 亚洲日本无吗高清不卡| 欧美成人久久| 亚洲人成欧美中文字幕| 一道本一区二区| 国产精品青草久久| 久久亚洲精品中文字幕冲田杏梨| 国产日韩精品电影| 欧美在线综合| 欧美高清成人| 99在线精品观看| 国产精品久久午夜| 久久精品国产999大香线蕉| 欧美成人影音| 在线一区二区三区四区| 国产欧美欧美| 老司机亚洲精品| 一区二区av在线| 久久亚洲电影| 一区二区三区免费网站| 国产精品一区二区久久久| 久久久精品一区| 日韩一级不卡| 美女网站在线免费欧美精品| 夜夜嗨av一区二区三区免费区 | 亚洲大胆av| 欧美日韩成人在线| 欧美影院午夜播放| 亚洲高清色综合| 欧美一区二区三区在线观看| 亚洲成人在线视频播放| 国产精品女主播一区二区三区| 久久免费精品视频| 免费人成网站在线观看欧美高清| 国产精品国产精品| 久久婷婷国产麻豆91天堂| 亚洲美女在线观看| 在线高清一区| 亚洲免费观看| 国产精品视频1区| 男女视频一区二区| 午夜日韩视频| 9国产精品视频| 欧美国产日韩精品免费观看| 欧美日韩综合视频| 亚洲一区二区三区成人在线视频精品| 欧美一级日韩一级| 一区二区三区毛片| 亚洲黄色在线观看| 一区二区三区在线不卡| 国产精品视频网址| 欧美日韩视频在线一区二区 | 在线欧美日韩国产| 国产伦理一区| 国产精品久久久久久久久久妞妞| 欧美激情精品久久久久|