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

Benjamin

靜以修身,儉以養德,非澹薄無以明志,非寧靜無以致遠。
隨筆 - 398, 文章 - 0, 評論 - 196, 引用 - 0
數據加載中……

linux下的log4cplus應用

log4cplus主要包括layout、appender、loglevel等;實現了5個等級的信息:DEBUG、INFO、WARNING、ERROR和FATAL。
Layouts :布局器,控制輸出消息的格式.
Appenders :掛接器,與布局器緊密配合,將特定格式的消息輸出到所掛接的設備終端
(如屏幕,文件等等)。
Logger :記錄器,保存并跟蹤對象日志信息變更的實體,當你需要對一個對象進行
記錄時,就需要生成一個logger。
Categories :分類器,層次化(hierarchy)的結構,用于對被記錄信息的分類,層次中每一個節點維護一個logger的所有信息。

使用log4cplus有六個基本步驟:
1. 實例化一個appender對象
2. 實例化一個layout對象
3. 將layout對象綁定(attach)到appender對象
4. 實例化一個logger對象,調用靜態函數:log4cplus::Logger::getInstance("logger_name")
5. 將appender對象綁定(attach)到logger對象,如省略此步驟,標準輸出(屏幕)appender對象會綁定到logger
6. 設置logger的優先級,如省略此步驟,各種有限級的消息都將被記錄


下面的例子說明如何將日志寫到文件中,在編譯是要加上-llog4cplus -lthread
  1//Include .h file 
  2#include <log4cplus/logger.h> 
  3#include <log4cplus/fileappender.h> 
  4#include <log4cplus/consoleappender.h> 
  5#include <log4cplus/layout.h> 
  6#include <string>
  7#include <memory>
  8using namespace log4cplus; 
  9using namespace log4cplus::helpers; 
 10int main()
 11{
 12    //FileAppender(const log4cplus::tstring& filename,                     L
 13    //             OG4CPLUS_OPEN_MODE_TYPE mode = LOG4CPLUS_FSTREAM_NAMESPACE::ios::trunc,
 14    //             bool immediateFlush = true);                     
 15    //filename       : 文件名
 16    //mode           : 文件類型,可選擇的文件類型包括app、ate、binary、in、out、trunc標志,缺省是trunc,表示將先前文件刪除。
 17    //immediateFlush :緩沖刷新標志,如果為true表示每向文件寫一條記錄就刷新一次緩存,否則直到FileAppender
 18    //                 被關閉或文件緩存已滿才更新文件,一般是要設置true的,比如你往文件寫的過程中出了錯誤(如程序非正常退出),
 19    //                 即使文件沒有正常關閉也可以保證程序終止時刻之前的所有記錄都會被正常保存。
 20    // 定義一個文件Appender 
 21    SharedAppenderPtr pFileAppender(new FileAppender(("testlog.log")));
 22    
 23    //log4cplus::RollingFileAppender::RollingFileAppender(const log4cplus::tstring& filename,                           
 24    //                                                                      long maxFileSize,
 25    //                                                                      int maxBackupIndex, 
 26    //                                                                      bool immediateFlush)
 27    //filename       : 文件名
 28    //maxFileSize    : 文件的最大尺寸
 29    //maxBackupIndex : 最大記錄文件數
 30    //immediateFlush : 緩沖刷新標志
 31   //RollingFileAppender類可以根據你預先設定的大小來決定是否轉儲,當超過該大小,后續log信息會另存到新文件中,
 32   //除了定義每個記錄文件的大小之外,你還要確定在RollingFileAppender類對象構造時最多需要多少個這樣的記錄文件(maxBackupIndex+1),
 33   //當存儲的文件數目超過maxBackupIndex+1時,會刪除最早生成的文件,保證整個文件數目等于maxBackupIndex+1。然后繼續記錄
 34    //SharedAppenderPtr  pFileAppender(new RollingFileAppender("testlog.log", 5*1024, 5));   
 35    
 36    
 37   //DailyRollingFileAppender::DailyRollingFileAppender(const log4cplus::tstring& filename,
 38   //                                                     DailyRollingFileSchedule schedule,
 39   //                                                     bool immediateFlush,
 40   //                                                     int maxBackupIndex)
 41   //DailyRollingFileAppender類可以根據你預先設定的頻度來決定是否轉儲,當超過該頻度,后續log信息會另存到新文件中
 42   //,這里的頻度包括:MONTHLY(每月)、WEEKLY(每周)、DAILY(每日)、TWICE_DAILY(每兩天)、HOURLY(每時)、MINUTELY(每分)。
 43   //maxBackupIndex的含義同上,
 44   //下面代碼運行后會以分鐘為單位,分別生成名為Test.log.2004-10-17-03-03、
 45   //Test.log.2004-10-17-03-04和Test.log.2004-10-17-03-05這樣的文件;如果超過了就另存。
 46   //SharedAppenderPtr pFileAppender(new DailyRollingFileAppender("test.log", MINUTELY, true, 5));
 47   
 48   
 49   pFileAppender->setName("LoggerName");
 50    
 51   
 52    
 53    //"%%",轉義為%, 即,std::string pattern = "%%" 時輸出: "%"
 54    //"%c",輸出logger名稱,比如std::string pattern ="%c" 時輸出: "test_logger.subtest",
 55    //       也可以控制logger名稱的顯示層次,比如"%c{1}"時輸出"test_logger",其中數字表示層次
 56    //
 57    //"%D",顯示本地時間,當std::string pattern ="%D" 時輸出:"2004-10-16 18:55:45",
 58    //      %d顯示標準時間,所以當std::string pattern ="%d" 時輸出 "2004-10-16 10:55:45" (因為我們是東8區,差8個小時啊)。   
 59    //      可以通過%d{}定義更詳細的顯示格式,比如%d{%H:%M:%s}表示要顯示小時:分鐘:秒。大括號中可顯示的     
 60    //      預定義標識符如下:
 61    //%a -- 表示禮拜幾,英文縮寫形式,比如"Fri"
 62    //%A -- 表示禮拜幾,比如"Friday"
 63    //%b -- 表示幾月份,英文縮寫形式,比如"Oct"
 64    //%B -- 表示幾月份,"October"
 65    //%c -- 標準的日期+時間格式,如 "Sat Oct 16 18:56:19 2004"
 66    //%d -- 表示今天是這個月的幾號(1-31)"16"
 67    //%H -- 表示當前時刻是幾時(0-23),如 "18"
 68    //%I -- 表示當前時刻是幾時(1-12),如 "6"
 69    //%j -- 表示今天是哪一天(1-366),如 "290"
 70    //%m -- 表示本月是哪一月(1-12),如 "10"
 71    //%M -- 表示當前時刻是哪一分鐘(0-59),如 "59"
 72    //%p -- 表示現在是上午還是下午, AM or PM
 73    //%q -- 表示當前時刻中毫秒部分(0-999),如 "237"
 74    //%Q -- 表示當前時刻中帶小數的毫秒部分(0-999.999),如 "430.732"%S -- 表示當前時刻的多少秒(0-59),如 "32"
 75    //%U -- 表示本周是今年的第幾個禮拜,以周日為第一天開始計算(0-53),如 "41"
 76    //%w -- 表示禮拜幾,(0-6, 禮拜天為0),如 "6"
 77    //%W -- 表示本周是今年的第幾個禮拜,以周一為第一天開始計算(0-53
 78    //
 79    //"%F",輸出當前記錄器所在的文件名稱
 80    //"%L",輸出當前記錄器所在的文件行號"
 81    //"%l",輸出當前記錄器所在的文件名稱和行號
 82    //"%m",輸出原始信息,以確保原始信息被嵌入到帶格式的信息中。
 83    //"%n",換行符,沒什么好解釋的
 84    //"%p",輸出LogLevel,比如std::string pattern ="%p" 時輸出:"DEBUG"ï 
 85    //"%x",嵌套診斷上下文NDC (nested diagnostic context) 輸出,從堆棧中彈出上下文信息,
 86    //       NDC可以用對不同源的log信息(同時地)交叉輸出進行區分,關于NDC方面的詳細介紹會在下文中提到。
 87    //格式對齊,比如std::string pattern ="%-10m"時表示左對齊,寬度是10,此時會輸出"teststr   ",
 88    //當然其它的控制字符也可以相同的方式來使用,比如"%-12d","%-5p"等等
 89    std::auto_ptr<Layout> pPatternLayout(new PatternLayout(("%p:%D  -%m [%l]%n"))); 
 90    pFileAppender->setLayout(pPatternLayout); 
 91                
 92    // 定義Logger 
 93    Logger pTestLogger = Logger::getInstance(("LoggerName"));    
 94
 95    // 將需要關聯Logger的Appender添加到Logger上 
 96    pTestLogger.addAppender(pFileAppender);     
 97        
 98    // 輸出日志信息 
 99    //LOG4CPLUS_WARN(pTestLogger, "This is a <Warn> log message"); 
100    //LOG4CPLUS_DEBUG(pTestLogger, "This is a <Warn> log message");
101    pTestLogger.setLogLevel(TRACE_LOG_LEVEL);
102
103    LOG4CPLUS_TRACE(pTestLogger, "printMessages()");
104    LOG4CPLUS_DEBUG(pTestLogger, "This is a DEBUG message");
105    LOG4CPLUS_INFO(pTestLogger, "This is a INFO message");
106    LOG4CPLUS_WARN(pTestLogger, "This is a WARN message");
107    LOG4CPLUS_ERROR(pTestLogger, "This is a ERROR message");
108    LOG4CPLUS_FATAL(pTestLogger, "This is a FATAL message");
109
110    return 1;
111}
112
下面的例子是輸出到控制臺的一個例子

#include <log4cplus/logger.h>
#include <log4cplus/consoleappender.h>
#include <log4cplus/layout.h>
#include <memory>
#include <string>
using namespace log4cplus;
using namespace log4cplus::helpers;
using namespace std;
int main()
{
// 定義一個控制臺的Appender
        SharedAppenderPtr pConsoleAppender(new ConsoleAppender());

        // 定義一個簡單的Layout,并綁定到Appender
        auto_ptr<Layout> pSimpleLayout(new SimpleLayout());
        pConsoleAppender->setLayout(pSimpleLayout);

        // 定義Logger,并設置優先級
        Logger pTestLogger = Logger::getInstance(("LoggerName"));   
        pTestLogger.setLogLevel(WARN_LOG_LEVEL);

        // 將需要關聯Logger的Appender添加到Logger上
        pTestLogger.addAppender(pConsoleAppender);

        // 輸出日志信息
        LOG4CPLUS_WARN(pTestLogger, "This is a <Warn> log message...");


    return 0;
}

上面的例子中我使用的log4cplus的版本是log4cplus-1.0.4。

posted on 2011-11-04 13:46 Benjamin 閱讀(1806) 評論(0)  編輯 收藏 引用 所屬分類: C/C++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>
            国产日韩欧美一区在线 | 毛片精品免费在线观看| 性欧美1819性猛交| 国产欧美91| 国产精品久久久久久福利一牛影视| 亚洲国产日韩综合一区| 国产欧美精品国产国产专区| 久久不射2019中文字幕| 美女视频黄 久久| 一本不卡影院| 国产日韩av高清| 免费成人av资源网| 亚洲图片欧洲图片日韩av| 久久久久久亚洲精品不卡4k岛国| 亚洲成色精品| 国产精品wwwwww| 久久亚洲精选| 亚洲影视在线播放| 最新日韩在线视频| 欧美在线视频观看免费网站| 在线观看久久av| 欧美午夜精品久久久| 久久视频一区二区| 亚洲一线二线三线久久久| 久久艳片www.17c.com| 日韩亚洲精品视频| 国产综合av| 欧美体内she精视频| 久久久久久一区| 亚洲欧美日韩在线不卡| 亚洲激情视频在线播放| 欧美一区二区大片| 正在播放日韩| 亚洲激情视频网| 国产精品一区免费观看| 欧美韩国一区| 一区二区三区视频观看| 亚洲国产另类 国产精品国产免费| 国产精品va在线播放我和闺蜜| 久久亚洲风情| 久久久国产成人精品| 亚洲午夜激情网页| 一本大道久久a久久精品综合| 欧美福利视频在线| 久久视频在线看| 午夜亚洲影视| 亚洲一区二区三区中文字幕| 99精品欧美一区二区三区| 亚洲激情综合| 亚洲综合二区| 一区二区三区毛片| 一区二区三区精品视频| 9色精品在线| 亚洲精品视频在线| 18成人免费观看视频| 国产三级精品三级| 国产欧美一区二区精品忘忧草| 欧美日韩成人精品| 欧美精品xxxxbbbb| 欧美日韩成人综合天天影院| 男人的天堂亚洲| 麻豆精品一区二区av白丝在线| 久久国产婷婷国产香蕉| 久久精品官网| 久久久久成人精品免费播放动漫| 欧美中文字幕在线播放| 久久久久亚洲综合| 狼人社综合社区| 欧美韩日亚洲| 欧美日韩国产美女| 国产精品入口| 狠狠入ady亚洲精品经典电影| 红桃视频一区| 亚洲精品专区| 欧美一区二区国产| 美女黄色成人网| 亚洲激情女人| 亚洲网站在线| 欧美专区中文字幕| 免费中文字幕日韩欧美| 欧美少妇一区二区| 国产美女精品免费电影| 国产亚洲永久域名| 在线观看日产精品| 亚洲日韩成人| 欧美在线一二三四区| 噜噜噜噜噜久久久久久91 | 亚洲日本成人女熟在线观看| 夜夜嗨一区二区三区| 欧美sm视频| 99re这里只有精品6| 先锋影院在线亚洲| 欧美好吊妞视频| 国产欧美日韩精品一区| 最新日韩精品| 欧美亚洲视频在线观看| 亚洲国产高清在线| 亚洲欧美大片| 欧美激情区在线播放| 国产精品亚洲一区| 亚洲三级色网| 久久久精品2019中文字幕神马| 亚洲国产电影| 久久精品国产清高在天天线| 欧美成人激情视频免费观看| 国产精品卡一卡二卡三| 亚洲精品社区| 免费欧美高清视频| 欧美亚洲一区在线| 欧美天堂亚洲电影院在线观看| 亚洲国产成人久久综合一区| 午夜精品av| 99re亚洲国产精品| 欧美大片专区| 亚洲国产成人精品视频| 欧美怡红院视频| 国产精品99久久久久久久vr| 欧美gay视频激情| 激情小说亚洲一区| 欧美专区18| 亚洲一二三区在线| 国产精品成人aaaaa网站| 亚洲免费av片| 亚洲精品久久久久久一区二区| 久久精品国产欧美亚洲人人爽| 国产欧美日韩一区二区三区在线 | 久久久久久久久一区二区| av成人免费| 欧美日韩国产va另类| 亚洲黑丝在线| 亚洲国产精品www| 理论片一区二区在线| 亚洲成色www8888| 欧美激情视频一区二区三区不卡| 久久久久在线| 最新国产乱人伦偷精品免费网站| 欧美成人免费在线视频| 美女主播精品视频一二三四| 狠狠色2019综合网| 欧美成人69av| 欧美国产日韩一区| 一本色道久久综合| 亚洲毛片视频| 国产精品乱子乱xxxx| 欧美一区二区三区四区视频| 亚洲欧美国产一区二区三区| 国产一区二区电影在线观看| 99国内精品| 亚洲最快最全在线视频| 国产精品v日韩精品| 亚洲欧美另类综合偷拍| 午夜亚洲伦理| 在线观看欧美日韩国产| 亚洲激情二区| 国产精品盗摄久久久| 久久成人资源| 久久综合狠狠综合久久综合88| 91久久久精品| 亚洲一区免费在线观看| 韩国亚洲精品| 亚洲精品欧美精品| 国产欧美精品在线| 亚洲电影激情视频网站| 欧美日韩在线播放| 久久久久久成人| 欧美日韩a区| 久久综合图片| 欧美日韩高清一区| 久久综合一区二区| 欧美日韩国产精品一卡| 欧美影院在线播放| 你懂的国产精品| 性伦欧美刺激片在线观看| 久久综合狠狠综合久久综青草| 夜夜嗨av一区二区三区网页| 亚洲一区欧美| 夜夜狂射影院欧美极品| 久久国产成人| 午夜精品福利视频| 欧美高清视频一区二区| 久久一二三四| 国产精品伊人日日| 亚洲国产日本| 在线免费观看日本欧美| 亚洲愉拍自拍另类高清精品| 亚洲三级视频| 久久久精品国产免大香伊| 午夜视频在线观看一区| 欧美日韩一区二区三区免费| 美女免费视频一区| 国产日韩欧美制服另类| 一区二区三区 在线观看视| 亚洲精品一线二线三线无人区| 久久久精品一区二区三区| 久久精品av麻豆的观看方式 | 国产精品一区二区你懂的| 亚洲理论电影网| 亚洲国产日韩欧美在线99| 午夜视频一区在线观看| 亚洲免费在线看|