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

            久久se精品一区二区影院 | 久久99九九国产免费看小说| 久久91精品综合国产首页| 亚洲伊人久久综合影院| 亚洲综合伊人久久大杳蕉| 97久久久久人妻精品专区 | 精品综合久久久久久88小说 | 蜜臀av性久久久久蜜臀aⅴ| 99久久精品免费看国产免费| 狠狠色丁香久久婷婷综合| 91久久精品国产91性色也| 亚洲欧洲日产国码无码久久99| WWW婷婷AV久久久影片| 一本一本久久a久久精品综合麻豆| 久久精品午夜一区二区福利| 一97日本道伊人久久综合影院| 国产精品久久成人影院| 亚洲国产视频久久| 久久国产成人| 亚洲国产精品久久久久婷婷软件 | 国产成人无码精品久久久免费 | 久久天堂AV综合合色蜜桃网| 日本精品一区二区久久久| 国产精品一久久香蕉产线看| 7777精品伊人久久久大香线蕉| 国产AⅤ精品一区二区三区久久 | 国产精品九九久久精品女同亚洲欧美日韩综合区 | 国产叼嘿久久精品久久| 久久精品国产亚洲77777| 欧美精品国产综合久久| 色偷偷91久久综合噜噜噜噜| 久久精品国产亚洲精品| 亚洲一本综合久久| 久久精品国产亚洲沈樵| 久久96国产精品久久久| 69SEX久久精品国产麻豆| 亚洲精品无码久久千人斩| 99久久99久久精品国产片果冻| 久久这里只有精品首页| 久久精品国产清自在天天线 | 天天躁日日躁狠狠久久|