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

            靜以修身,儉以養德,非澹薄無以明志,非寧靜無以致遠。
            隨筆 - 397, 文章 - 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 閱讀(1782) 評論(0)  編輯 收藏 引用 所屬分類: C/C++linux

            国产精品对白刺激久久久| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 亚洲乱亚洲乱淫久久| 久久丝袜精品中文字幕| 99久久无色码中文字幕人妻| 久久国产精品成人免费| 久久婷婷五月综合成人D啪| 99精品国产综合久久久久五月天| 高清免费久久午夜精品| 亚洲人成无码网站久久99热国产| 久久ww精品w免费人成| 热RE99久久精品国产66热| 97精品伊人久久大香线蕉app| 青青草原综合久久大伊人导航| 欧美黑人激情性久久| 久久久久亚洲av成人无码电影| 国内精品久久久久伊人av| 欧美日韩中文字幕久久久不卡| 久久99国产综合精品女同| 久久亚洲精品国产亚洲老地址| 中文字幕成人精品久久不卡| 精品久久久噜噜噜久久久| 久久久久人妻一区二区三区| 精品久久人人爽天天玩人人妻| 欧洲精品久久久av无码电影| 欧美精品一区二区久久| 国产精品九九久久免费视频| 国产亚洲美女精品久久久久狼| 亚洲精品美女久久777777| 欧美与黑人午夜性猛交久久久| 久久精品国产亚洲网站| 久久久久亚洲AV片无码下载蜜桃| 婷婷久久五月天| 久久精品免费全国观看国产| 亚洲国产成人久久综合一区77| 国产精品免费久久久久电影网| 久久国产免费观看精品| 久久精品九九亚洲精品天堂| 久久国产精品-久久精品| 18岁日韩内射颜射午夜久久成人 | 91久久精品视频|