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

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            開源日志系統log4cplus(四)

            將log信息記錄到文件應該說是日志系統的一個基本功能,log4cplus在此基礎上,提供了更多的功能,可以按照你預先設定的大小來決定是否轉儲,當超過該大小,后續log信息會另存到新文件中,依次類推;或者按照日期來決定是否轉儲。本文將詳細介紹這些用法。


            				
            ### 如何將log記錄到文件 ###
            我們在例5中給出了一個將log記錄到文件的例子,用的是FileAppender類實現的,log4cplus提供了三個類用于
            文件操作,它們是FileAppender類、RollingFileAppender類、DailyRollingFileAppender類。
            1. FileAppender類
            實現了基本的文件操作功能,構造函數如下:
            FileAppender(const log4cplus::tstring& filename,
            ???????????????????? LOG4CPLUS_OPEN_MODE_TYPE mode = LOG4CPLUS_FSTREAM_NAMESPACE::ios::trunc,
            ???????????????????? bool immediateFlush = true);
            ????????????????????
            filename?????? : 文件名
            mode?????????? : 文件類型,可選擇的文件類型包括app、ate、binary、in、out、trunc,因為實際上只是對
            ???????????????? stl的一個簡單包裝,呵呵,這里就不多講了。缺省是trunc,表示將先前文件刪除。
            immediateFlush :緩沖刷新標志,如果為true表示每向文件寫一條記錄就刷新一次緩存,否則直到FileAppender
            ???????????????? 被關閉或文件緩存已滿才更新文件,一般是要設置true的,比如你往文件寫的過程中出現
            ???????????????? 了錯誤(如程序非正常退出),即使文件沒有正常關閉也可以保證程序終止時刻之前的所有
            ???????????????? 記錄都會被正常保存。
            FileAppender類的使用情況請參考例5,這里不再贅述。
            				
            2. RollingFileAppender類
            構造函數如下:
            log4cplus::RollingFileAppender::RollingFileAppender(const log4cplus::tstring& filename,
            ??????????????????????????????????????????????????? long maxFileSize,
            ??????????????????????????????????????????????????? int maxBackupIndex,
            ??????????????????????????????????????????????????? bool immediateFlush)
            filename?????? : 文件名
            maxFileSize??? : 文件的最大尺寸
            maxBackupIndex : 最大記錄文件數
            immediateFlush : 緩沖刷新標志
            ???????????????????????????????????????????????????
            RollingFileAppender類可以根據你預先設定的大小來決定是否轉儲,當超過該大小,后續log信息會另存到新
            文件中,除了定義每個記錄文件的大小之外,你還要確定在RollingFileAppender類對象構造時最多需要多少個
            這樣的記錄文件(maxBackupIndex+1),當存儲的文件數目超過maxBackupIndex+1時,會刪除最早生成的文件,
            保證整個文件數目等于maxBackupIndex+1。然后繼續記錄,比如以下代碼片段:
            ??? ... ...
            ???
            ??? #define LOOP_COUNT 200000
            ???
            ??? SharedAppenderPtr _append(new RollingFileAppender("Test.log", 5*1024, 5));
            ??? _append->setName("file test");
            ??? _append->setLayout( std::auto_ptr(new TTCCLayout()) );
            ??? Logger::getRoot().addAppender(_append);
            ??? Logger root = Logger::getRoot();
            ??? Logger test = Logger::getInstance("test");
            ??? Logger subTest = Logger::getInstance("test.subtest");
            ??? for(int i=0; i??? {
            ??????? NDCContextCreator _context("loop");
            ??????? LOG4CPLUS_DEBUG(subTest, "Entering loop #" << i)
            ??? }
            ???
            ??? ... ...
            ???
            運行結果:
            運行后會產生6個輸出文件,Test.log、Test.log.1、Test.log.2、Test.log.3、Test.log.4、Test.log.5
            其中Test.log存放著最新寫入的信息,而最后一個文件中并不包含第一個寫入信息,說明已經被不斷更新了。
            需要指出的是,這里除了Test.log之外,每個文件的大小都是200K,而不是我們想像中的5K,這是因為
            log4cplus中隱含定義了文件的最小尺寸是200K,只有大于200K的設置才生效,<= 200k的設置都會被認為是
            200K.
            				
            3. DailyRollingFileAppender類
            構造函數如下:
            DailyRollingFileAppender::DailyRollingFileAppender(const log4cplus::tstring& filename,
            ?????????????????????????????????????????????????? DailyRollingFileSchedule schedule,
            ?????????????????????????????????????????????????? bool immediateFlush,
            ?????????????????????????????????????????????????? int maxBackupIndex)
            ??????????????????????????????????????????????????
            filename?????? : 文件名
            schedule?????? : 存儲頻度
            immediateFlush : 緩沖刷新標志
            maxBackupIndex : 最大記錄文件數
            DailyRollingFileAppender類可以根據你預先設定的頻度來決定是否轉儲,當超過該頻度,后續log信息會另存
            到新文件中,這里的頻度包括:MONTHLY(每月)、WEEKLY(每周)、DAILY(每日)、TWICE_DAILY(每兩天)、
            HOURLY(每時)、MINUTELY(每分)。maxBackupIndex的含義同上所述,比如以下代碼片段:
            ??? ... ...
            ???
            ??? SharedAppenderPtr _append(new DailyRollingFileAppender("Test.log", MINUTELY, true, 5));
            ??? _append->setName("file test");
            ??? _append->setLayout( std::auto_ptr(new TTCCLayout()) );
            ??? Logger::getRoot().addAppender(_append);
            ??? Logger root = Logger::getRoot();
            ??? Logger test = Logger::getInstance("test");
            ??? Logger subTest = Logger::getInstance("test.subtest");
            ??? for(int i=0; i??? {
            ??????? NDCContextCreator _context("loop");
            ??????? LOG4CPLUS_DEBUG(subTest, "Entering loop #" << i)
            ??? }
            ???
            ??? ... ...
            				
            運行結果:
            運行后會以分鐘為單位,分別生成名為Test.log.2004-10-17-03-03、Test.log.2004-10-17-03-04和
            Test.log.2004-10-17-03-05這樣的文件。
            需要指出的是,剛看到按照頻度(如HOURLY、MINUTELY)轉儲這樣的概念,以為log4cplus提供了內部定時器,
            感覺很奇怪,因為日志系統不應該主動記錄,而loging事件總是應該被動觸發的啊。仔細看了源代碼后才知道
            這里的"頻度"并不是你寫入文件的速度,其實是否轉儲的標準并不依賴你寫入文件的速度,而是依賴于寫入
            的那一時刻是否滿足了頻度條件,即是否超過了以分鐘、小時、周、月為單位的時間刻度,如果超過了就另存。
            本部分詳細介紹log信息的幾種文件操作方式,下面將重點介紹一下如何有選擇地控制log信息的輸出。

            posted on 2006-08-26 04:50 楊粼波 閱讀(4613) 評論(0)  編輯 收藏 引用 所屬分類: Windows編程Linux編程

            久久青青草原国产精品免费 | 亚洲人成无码久久电影网站| 久久精品这里热有精品| 久久国产香蕉视频| 亚洲精品午夜国产VA久久成人| 2021久久精品国产99国产精品| 国产午夜精品理论片久久| 中文字幕人妻色偷偷久久| 久久九九青青国产精品| 日韩欧美亚洲综合久久 | 久久WWW免费人成—看片| 久久狠狠一本精品综合网| 一本一本久久A久久综合精品 | 精品久久久久久久中文字幕| 亚洲欧美一区二区三区久久| 国产成人久久激情91| 精品久久久久成人码免费动漫 | 国内精品久久久久久久97牛牛| 久久青青草原精品国产不卡| 99久久精品影院老鸭窝| 思思久久99热免费精品6| 伊人久久综在合线亚洲2019| 中文字幕人妻色偷偷久久| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 久久毛片免费看一区二区三区| 久久久无码精品亚洲日韩蜜臀浪潮| 久久亚洲av无码精品浪潮| 亚洲国产天堂久久综合网站| 国产精品一区二区久久不卡| 精品久久久无码21p发布| 性做久久久久久免费观看| 精品久久久久久久久久中文字幕 | 久久996热精品xxxx| 国产精品一久久香蕉国产线看| 色诱久久久久综合网ywww| 伊人久久综合成人网| 亚洲欧美日韩久久精品第一区| 人妻无码αv中文字幕久久琪琪布 人妻无码精品久久亚瑟影视 | 亚洲国产成人久久综合碰碰动漫3d| 久久精品国产亚洲AV电影| 俺来也俺去啦久久综合网|