• <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)德,非澹薄無以明志,非寧靜無以致遠(yuǎn)。
            隨筆 - 397, 文章 - 0, 評論 - 196, 引用 - 0
            數(shù)據(jù)加載中……

            linux下的log4cplus應(yīng)用

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

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


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

            #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,并設(shè)置優(yōu)先級
                    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 閱讀(1791) 評論(0)  編輯 收藏 引用 所屬分類: C/C++linux

            亚洲精品高清久久| 2021精品国产综合久久| 欧美粉嫩小泬久久久久久久 | 国产视频久久| 国产成人综合久久精品红| 久久久久久久人妻无码中文字幕爆| 精品午夜久久福利大片| 亚洲精品无码久久久| 国产精品18久久久久久vr| 亚洲精品97久久中文字幕无码| 精品国产99久久久久久麻豆 | 久久久久久久亚洲Av无码| 久久99精品国产99久久6| 日韩精品久久久久久久电影蜜臀 | 日日狠狠久久偷偷色综合96蜜桃| 精品久久久中文字幕人妻 | 免费观看成人久久网免费观看| 伊人久久五月天| 精品国产婷婷久久久| 久久久久久无码Av成人影院| 国产69精品久久久久观看软件| 99热都是精品久久久久久| 无码国内精品久久人妻| 青青热久久国产久精品 | 久久综合中文字幕| 精品久久久久久亚洲精品| 久久久这里只有精品加勒比| 久久亚洲高清综合| 国产精品九九久久精品女同亚洲欧美日韩综合区 | 亚洲AV无码久久精品蜜桃| 伊人久久大香线蕉综合5g| 一本一道久久a久久精品综合| 久久精品成人一区二区三区| 99久久免费只有精品国产| 亚洲国产精品久久久久网站| 中文字幕久久欲求不满| 久久精品国产一区二区电影| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 久久久久人妻精品一区三寸蜜桃| 人妻精品久久无码区| 国产精品久久久久久久久免费|