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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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>
            久久精品最新地址| 国产主播一区二区| 午夜精品久久久久久久| 在线亚洲精品福利网址导航| 日韩视频精品在线观看| 亚洲精品视频一区| 亚洲激情国产| 亚洲精品久久久一区二区三区| 亚洲伦理在线观看| 亚洲一区欧美二区| 久久亚洲一区二区三区四区| 欧美久久久久中文字幕| 国产精品蜜臀在线观看| 激情婷婷亚洲| 一区二区三区**美女毛片| 亚洲一区二区在线观看视频| 久久国产福利| 亚洲国内精品在线| 亚洲男人第一av网站| 久久精品首页| 欧美视频在线观看一区二区| 狠狠综合久久| 亚洲欧美日本精品| 亚洲丶国产丶欧美一区二区三区| 亚洲视频福利| 欧美成人一区二区三区片免费| 国产精品国产自产拍高清av| 亚洲国产精品免费| 久久综合色8888| 国产精品久久久久久户外露出 | 欧美国产一区二区在线观看 | 午夜精品久久久久久久白皮肤 | 一区二区三区视频在线| 久久精品中文字幕免费mv| 欧美日韩精品一二三区| 激情av一区| 欧美在线视频免费播放| 亚洲三级免费观看| 久久先锋资源| 国产一区二区日韩| 亚洲男人的天堂在线| 亚洲激情在线观看视频免费| 久久久久久久综合日本| 国产精品婷婷| 亚洲一区视频| 国产精品久久久久久久久婷婷| 欧美日韩国产成人在线| 国产啪精品视频| 中日韩美女免费视频网址在线观看 | 久久婷婷国产综合国色天香 | 亚洲九九精品| 欧美国产精品| 久久九九热免费视频| 国产一区二区三区免费观看| 亚洲综合999| 一区二区黄色| 国产精品久久久久久超碰| 亚洲一区二区三区在线| 99精品久久| 欧美四级剧情无删版影片| 夜夜嗨av一区二区三区免费区| 欧美黄色免费| 欧美国产日韩a欧美在线观看| 亚洲国产福利在线| 亚洲国产精品久久91精品| 欧美aⅴ一区二区三区视频| 在线观看视频一区| 欧美成人亚洲| 欧美日韩1080p| 国产精品99久久久久久久女警| 亚洲精品在线免费| 99热在这里有精品免费| 欧美激情国产高清| 在线亚洲精品| 亚洲免费视频观看| 国产一区二区三区在线观看免费| 久久高清福利视频| 老司机精品导航| 99在线视频精品| 亚洲男人的天堂在线| 国产一区二区精品久久| 欧美激情日韩| 国产精品乱码| 久久综合亚州| 免费在线亚洲欧美| 亚洲一区久久久| 亚洲影音一区| 亚洲高清在线播放| 宅男66日本亚洲欧美视频| 国产欧美一区二区精品婷婷| 免播放器亚洲| 欧美日韩中文字幕在线视频| 欧美在线国产| 欧美激情bt| 久久激情网站| 欧美日韩精品在线观看| 久久精品麻豆| 欧美日韩一区精品| 美女爽到呻吟久久久久| 在线播放日韩专区| 一区二区三区四区五区精品| 国产一区二区高清不卡| 亚洲片在线观看| 国产综合激情| 中文日韩在线| 亚洲精品小视频在线观看| 亚洲欧美综合v| 99精品99| 蜜桃av综合| 久久久久久午夜| 国产精品99免视看9| 欧美激情亚洲综合一区| 国产午夜亚洲精品理论片色戒| 亚洲人午夜精品免费| 国内揄拍国内精品久久| 亚洲一区二区三区中文字幕| 99在线精品免费视频九九视| 久久久久国产一区二区三区四区| 亚洲图片在区色| 欧美—级高清免费播放| 欧美电影在线播放| 激情欧美日韩一区| 欧美亚洲网站| 久久精品一二三区| 国产欧美日韩精品一区| 在线亚洲精品| 亚洲欧美一区二区视频| 欧美三区美女| 一本一本大道香蕉久在线精品| 日韩视频在线播放| 欧美激情bt| 亚洲日本一区二区| 一区二区三区免费在线观看| 欧美国产精品一区| 亚洲高清av| 日韩视频不卡| 欧美揉bbbbb揉bbbbb| 亚洲欧洲三级| 久久久久青草大香线综合精品| 久久久精品五月天| 狠狠色丁香久久婷婷综合_中| 欧美一区二区三区的| 久久久久久久久蜜桃| 国产在线一区二区三区四区 | 中国成人亚色综合网站| 亚洲一区二区黄| 国产精品高潮视频| 午夜精品久久久久久久久久久 | 亚洲毛片在线| 亚洲一区三区在线观看| 国产精品视频久久久| 欧美有码视频| 欧美成人免费在线| 9人人澡人人爽人人精品| 欧美亚洲第一区| 亚洲综合电影| 可以看av的网站久久看| 亚洲另类一区二区| 国产精品久久夜| 欧美一区二区三区啪啪| 欧美顶级少妇做爰| 亚洲午夜电影网| 韩国av一区二区三区四区| 欧美aa在线视频| 亚洲一区二区三区免费在线观看| 欧美日韩第一页| 亚洲综合999| 亚洲欧美日韩成人| 国内揄拍国内精品少妇国语| 欧美.com| 午夜精品在线观看| 91久久极品少妇xxxxⅹ软件| 欧美在线视频免费| 亚洲美女毛片| 国产一区香蕉久久| 欧美系列亚洲系列| 久久天堂成人| 亚洲一区二区三区四区五区黄 | 先锋影音国产精品| 亚洲国产精品黑人久久久| 欧美系列亚洲系列| 久久中文字幕一区| 亚洲欧美欧美一区二区三区| 亚洲国产高潮在线观看| 久久久久99| 西西人体一区二区| 日韩视频在线一区| 影音先锋欧美精品| 国产日韩欧美在线播放| 欧美午夜精品久久久久久人妖 | 亚洲欧美偷拍卡通变态| 亚洲国产精品成人精品| 久久蜜臀精品av| 欧美一级二级三级蜜桃| 宅男66日本亚洲欧美视频| 亚洲高清影视| 在线观看91精品国产麻豆| 国产欧美日韩另类视频免费观看| 亚洲国产99精品国自产| 久久精品视频99|