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

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>
            亚洲欧美在线免费观看| 久久精品水蜜桃av综合天堂| 一本大道久久a久久精二百| 国产婷婷色一区二区三区四区| 免费久久精品视频| 久久精品国产亚洲5555| 欧美国产在线视频| 久久婷婷人人澡人人喊人人爽| 亚洲欧美另类在线| 亚洲午夜免费视频| 亚洲一二三四久久| 亚洲一区二区三区国产| 韩日欧美一区二区三区| 国产区在线观看成人精品| 国产精品天天摸av网| 国产精品日韩久久久久| 国产精品日韩精品欧美精品| 欧美区视频在线观看| 欧美精品三级| 国产精品观看| 国产欧美精品一区| 国产午夜久久久久| 黄色日韩在线| 亚洲国产精品一区二区三区| 国产精品久久久久一区| 国产精品无码专区在线观看| 国产精品色在线| 国产一区二区三区精品欧美日韩一区二区三区| 艳女tv在线观看国产一区| 女人天堂亚洲aⅴ在线观看| 欧美成人免费小视频| 亚洲激情国产精品| 亚洲看片网站| 宅男精品视频| 亚洲综合电影| 久久这里有精品15一区二区三区| 蜜桃av一区二区三区| 欧美久久久久免费| 欧美少妇一区| 一区一区视频| 亚洲区在线播放| 亚洲桃色在线一区| 日韩一级在线观看| 亚洲欧洲精品一区二区| 欧美呦呦网站| 欧美制服丝袜| 一本色道久久综合狠狠躁的推荐| 一区二区三区精品久久久| 亚洲大片在线| 永久555www成人免费| 一本色道久久88精品综合| 亚洲欧美一区二区在线观看| 午夜久久一区| 亚洲黄色在线视频| 先锋影音网一区二区| 欧美精品一区二区三区蜜桃| 国产日韩欧美在线| 一区二区高清在线| 免费91麻豆精品国产自产在线观看| 久久亚洲免费| 在线亚洲精品| 欧美大片网址| 欧美四级电影网站| 亚洲精品影院在线观看| 久久久久久久一区二区| 亚洲精品美女在线观看| 亚洲图片欧美午夜| 欧美日韩成人综合天天影院| 狠狠色狠狠色综合日日五| 香蕉亚洲视频| 一区二区欧美在线| 久久精品视频在线免费观看| 国产精品天美传媒入口| 亚洲午夜未删减在线观看| 欧美激情一区二区三区成人| 欧美专区在线| 国产一区白浆| 久久久久免费观看| 久久国产综合精品| 狠狠色丁香婷婷综合影院| 久久精品二区三区| 亚洲三级电影在线观看 | 亚洲第一搞黄网站| 久久激情综合网| 亚洲欧美日韩精品综合在线观看| 国产精品久久影院| 一区二区三区回区在观看免费视频| 欧美国产丝袜视频| 欧美精品久久久久久| 日韩一级免费| 亚洲精选中文字幕| 国产欧美日韩亚洲| 欧美日韩一区二区三| 亚洲理论在线观看| 亚洲精品影视| 国产精品久久久久久久9999| 午夜国产精品视频免费体验区| 久久亚洲私人国产精品va| 欧美一激情一区二区三区| 国模私拍视频一区| 麻豆精品传媒视频| 久久米奇亚洲| 亚洲精品麻豆| 午夜精品国产| 99精品热视频只有精品10| 欧美一区二区三区免费观看视频| 亚洲国产日韩欧美综合久久| 亚洲色图在线视频| 亚洲精品免费网站| 欧美在线免费视频| 亚洲欧美日韩国产综合精品二区| 免费一区二区三区| 久久久久.com| 国产精品私房写真福利视频| 蜜桃av噜噜一区| 国产欧美视频一区二区| 亚洲精品国产日韩| 亚洲电影av| 久久久精品国产一区二区三区| 亚洲一区二区欧美日韩| 欧美精品一区二区三区在线看午夜| 久久亚洲综合色| 国产亚洲综合在线| 亚洲欧美日韩高清| 亚洲欧美日本日韩| 欧美成人第一页| 免费日韩av| 在线国产日韩| 久久国产精品第一页| 久久都是精品| 国产网站欧美日韩免费精品在线观看 | 欧美一区二区女人| 亚洲一区二区三区免费视频| 男人的天堂亚洲| 久热精品视频在线免费观看| 国产欧美视频一区二区| 亚洲欧美日韩电影| 久久精品国产99国产精品| 国产日韩欧美黄色| 欧美一区二区三区免费看 | 美女视频黄a大片欧美| 激情综合五月天| 麻豆成人av| 91久久国产综合久久蜜月精品| 亚洲国产欧美日韩另类综合| 欧美69视频| 99re6热只有精品免费观看| 亚洲视频播放| 亚洲精品影院在线观看| 老司机精品视频网站| 香蕉国产精品偷在线观看不卡| 亚洲一二三区精品| 亚洲视频一区二区| 亚洲综合视频1区| 久久最新视频| 欧美性猛交xxxx免费看久久久| 亚洲精品乱码久久久久久久久| 国产精品久久毛片a| 亚洲第一中文字幕| 91久久午夜| 欧美视频一区二区三区| 亚洲欧美综合精品久久成人 | 亚洲国产精品第一区二区三区| 狂野欧美一区| 一区二区三区精密机械公司| 欧美一区二区三区四区夜夜大片| 韩国福利一区| 欧美精品在线一区| 亚洲男同1069视频| 欧美国产在线观看| 性欧美xxxx视频在线观看| 1000部精品久久久久久久久| 欧美理论电影网| 久久av一区二区三区漫画| 亚洲级视频在线观看免费1级| 亚洲自拍16p| 亚洲精品看片| 国内精品久久久久久久影视蜜臀 | 性欧美大战久久久久久久久| 影音先锋中文字幕一区二区| 欧美欧美在线| 久久久久久精| 亚洲天堂av在线免费| 美女久久网站| 欧美一区二区免费观在线| 亚洲精品欧美日韩| 国产综合亚洲精品一区二| 欧美理论片在线观看| 久久久久国产精品一区二区| 一区二区日韩伦理片| 亚洲激情综合| 欧美大片一区| 麻豆国产va免费精品高清在线| 香蕉久久一区二区不卡无毒影院 | 欧美怡红院视频| 亚洲天堂成人| 在线视频欧美一区| 亚洲人成免费| 亚洲精品视频啊美女在线直播| 久久久久青草大香线综合精品|