• <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>

            Benjamin

            靜以修身,儉以養(yǎng)德,非澹薄無(wú)以明志,非寧?kù)o無(wú)以致遠(yuǎn)。
            隨筆 - 397, 文章 - 0, 評(píng)論 - 196, 引用 - 0
            數(shù)據(jù)加載中……

            linux下的log4cplus應(yīng)用

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

            使用log4cplus有六個(gè)基本步驟:
            1. 實(shí)例化一個(gè)appender對(duì)象
            2. 實(shí)例化一個(gè)layout對(duì)象
            3. 將layout對(duì)象綁定(attach)到appender對(duì)象
            4. 實(shí)例化一個(gè)logger對(duì)象,調(diào)用靜態(tài)函數(shù):log4cplus::Logger::getInstance("logger_name")
            5. 將appender對(duì)象綁定(attach)到logger對(duì)象,如省略此步驟,標(biāo)準(zhǔn)輸出(屏幕)appender對(duì)象會(huì)綁定到logger
            6. 設(shè)置logger的優(yōu)先級(jí),如省略此步驟,各種有限級(jí)的消息都將被記錄


            下面的例子說(shuō)明如何將日志寫(xiě)到文件中,在編譯是要加上-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標(biāo)志,缺省是trunc,表示將先前文件刪除。
             17    //immediateFlush :緩沖刷新標(biāo)志,如果為true表示每向文件寫(xiě)一條記錄就刷新一次緩存,否則直到FileAppender
             18    //                 被關(guān)閉或文件緩存已滿才更新文件,一般是要設(shè)置true的,比如你往文件寫(xiě)的過(guò)程中出了錯(cuò)誤(如程序非正常退出),
             19    //                 即使文件沒(méi)有正常關(guān)閉也可以保證程序終止時(shí)刻之前的所有記錄都會(huì)被正常保存。
             20    // 定義一個(gè)文件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 : 最大記錄文件數(shù)
             30    //immediateFlush : 緩沖刷新標(biāo)志
             31   //RollingFileAppender類可以根據(jù)你預(yù)先設(shè)定的大小來(lái)決定是否轉(zhuǎn)儲(chǔ),當(dāng)超過(guò)該大小,后續(xù)log信息會(huì)另存到新文件中,
             32   //除了定義每個(gè)記錄文件的大小之外,你還要確定在RollingFileAppender類對(duì)象構(gòu)造時(shí)最多需要多少個(gè)這樣的記錄文件(maxBackupIndex+1),
             33   //當(dāng)存儲(chǔ)的文件數(shù)目超過(guò)maxBackupIndex+1時(shí),會(huì)刪除最早生成的文件,保證整個(gè)文件數(shù)目等于maxBackupIndex+1。然后繼續(xù)記錄
             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類可以根據(jù)你預(yù)先設(shè)定的頻度來(lái)決定是否轉(zhuǎn)儲(chǔ),當(dāng)超過(guò)該頻度,后續(xù)log信息會(huì)另存到新文件中
             42   //,這里的頻度包括:MONTHLY(每月)、WEEKLY(每周)、DAILY(每日)、TWICE_DAILY(每?jī)商欤OURLY(每時(shí))、MINUTELY(每分)。
             43   //maxBackupIndex的含義同上,
             44   //下面代碼運(yùn)行后會(huì)以分鐘為單位,分別生成名為Test.log.2004-10-17-03-03、
             45   //Test.log.2004-10-17-03-04和Test.log.2004-10-17-03-05這樣的文件;如果超過(guò)了就另存。
             46   //SharedAppenderPtr pFileAppender(new DailyRollingFileAppender("test.log", MINUTELY, true, 5));
             47   
             48   
             49   pFileAppender->setName("LoggerName");
             50    
             51   
             52    
             53    //"%%",轉(zhuǎn)義為%, 即,std::string pattern = "%%" 時(shí)輸出: "%"
             54    //"%c",輸出logger名稱,比如std::string pattern ="%c" 時(shí)輸出: "test_logger.subtest",
             55    //       也可以控制logger名稱的顯示層次,比如"%c{1}"時(shí)輸出"test_logger",其中數(shù)字表示層次
             56    //
             57    //"%D",顯示本地時(shí)間,當(dāng)std::string pattern ="%D" 時(shí)輸出:"2004-10-16 18:55:45",
             58    //      %d顯示標(biāo)準(zhǔn)時(shí)間,所以當(dāng)std::string pattern ="%d" 時(shí)輸出 "2004-10-16 10:55:45" (因?yàn)槲覀兪菛|8區(qū),差8個(gè)小時(shí)啊)。   
             59    //      可以通過(guò)%d{}定義更詳細(xì)的顯示格式,比如%d{%H:%M:%s}表示要顯示小時(shí):分鐘:秒。大括號(hào)中可顯示的     
             60    //      預(yù)定義標(biāo)識(shí)符如下:
             61    //%a -- 表示禮拜幾,英文縮寫(xiě)形式,比如"Fri"
             62    //%A -- 表示禮拜幾,比如"Friday"
             63    //%b -- 表示幾月份,英文縮寫(xiě)形式,比如"Oct"
             64    //%B -- 表示幾月份,"October"
             65    //%c -- 標(biāo)準(zhǔn)的日期+時(shí)間格式,如 "Sat Oct 16 18:56:19 2004"
             66    //%d -- 表示今天是這個(gè)月的幾號(hào)(1-31)"16"
             67    //%H -- 表示當(dāng)前時(shí)刻是幾時(shí)(0-23),如 "18"
             68    //%I -- 表示當(dāng)前時(shí)刻是幾時(shí)(1-12),如 "6"
             69    //%j -- 表示今天是哪一天(1-366),如 "290"
             70    //%m -- 表示本月是哪一月(1-12),如 "10"
             71    //%M -- 表示當(dāng)前時(shí)刻是哪一分鐘(0-59),如 "59"
             72    //%p -- 表示現(xiàn)在是上午還是下午, AM or PM
             73    //%q -- 表示當(dāng)前時(shí)刻中毫秒部分(0-999),如 "237"
             74    //%Q -- 表示當(dāng)前時(shí)刻中帶小數(shù)的毫秒部分(0-999.999),如 "430.732"%S -- 表示當(dāng)前時(shí)刻的多少秒(0-59),如 "32"
             75    //%U -- 表示本周是今年的第幾個(gè)禮拜,以周日為第一天開(kāi)始計(jì)算(0-53),如 "41"
             76    //%w -- 表示禮拜幾,(0-6, 禮拜天為0),如 "6"
             77    //%W -- 表示本周是今年的第幾個(gè)禮拜,以周一為第一天開(kāi)始計(jì)算(0-53
             78    //
             79    //"%F",輸出當(dāng)前記錄器所在的文件名稱
             80    //"%L",輸出當(dāng)前記錄器所在的文件行號(hào)"
             81    //"%l",輸出當(dāng)前記錄器所在的文件名稱和行號(hào)
             82    //"%m",輸出原始信息,以確保原始信息被嵌入到帶格式的信息中。
             83    //"%n",換行符,沒(méi)什么好解釋的
             84    //"%p",輸出LogLevel,比如std::string pattern ="%p" 時(shí)輸出:"DEBUG"ï 
             85    //"%x",嵌套診斷上下文NDC (nested diagnostic context) 輸出,從堆棧中彈出上下文信息,
             86    //       NDC可以用對(duì)不同源的log信息(同時(shí)地)交叉輸出進(jìn)行區(qū)分,關(guān)于NDC方面的詳細(xì)介紹會(huì)在下文中提到。
             87    //格式對(duì)齊,比如std::string pattern ="%-10m"時(shí)表示左對(duì)齊,寬度是10,此時(shí)會(huì)輸出"teststr   ",
             88    //當(dāng)然其它的控制字符也可以相同的方式來(lái)使用,比如"%-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    // 將需要關(guān)聯(lián)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
            下面的例子是輸出到控制臺(tái)的一個(gè)例子

            #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()
            {
            // 定義一個(gè)控制臺(tái)的Appender
                    SharedAppenderPtr pConsoleAppender(new ConsoleAppender());

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

                    // 定義Logger,并設(shè)置優(yōu)先級(jí)
                    Logger pTestLogger = Logger::getInstance(("LoggerName"));   
                    pTestLogger.setLogLevel(WARN_LOG_LEVEL);

                    // 將需要關(guān)聯(lián)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 閱讀(1781) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C/C++linux

            久久久无码人妻精品无码| 精品国产一区二区三区久久| 99久久国产主播综合精品| 国产精品对白刺激久久久| 色综合久久综合中文综合网| 精品综合久久久久久98| 偷窥少妇久久久久久久久| 久久91精品国产91| 国产精品亚洲综合久久| 久久精品国产免费观看| 精品综合久久久久久97| 久久青青草原亚洲av无码app| 浪潮AV色综合久久天堂| 国产精品一区二区久久不卡| 精品久久香蕉国产线看观看亚洲| 波多野结衣中文字幕久久| 日本精品久久久久中文字幕| 欧美一区二区精品久久| 国产无套内射久久久国产| 久久久亚洲精品蜜桃臀| 久久久国产打桩机| 国产精品久久波多野结衣| 青青热久久综合网伊人| 亚洲精品成人久久久| 99久久精品免费看国产一区二区三区 | 久久久久久久亚洲Av无码| 久久国产色AV免费看| 99久久婷婷国产一区二区| 久久一区二区三区免费| 无码精品久久久天天影视| 久久综合欧美成人| 亚洲精品久久久www| 久久香蕉超碰97国产精品| 青青草原1769久久免费播放| 亚洲国产精品成人AV无码久久综合影院| 欧美亚洲国产精品久久| av午夜福利一片免费看久久| 久久国产午夜精品一区二区三区| 久久人人爽人人爽人人片AV高清 | 久久93精品国产91久久综合 | 亚洲伊人久久精品影院|