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

               C++ 技術中心

               :: 首頁 :: 聯系 ::  :: 管理
              160 Posts :: 0 Stories :: 87 Comments :: 0 Trackbacks

            公告

            鄭重聲明:本BLOG所發表的原創文章,作者保留一切權利。必須經過作者本人同意后方可轉載,并注名作者(天空)和出處(CppBlog.com)。作者Email:coder@luckcoder.com

            留言簿(27)

            搜索

            •  

            最新隨筆

            最新評論

            評論排行榜

            一.各種布局器
            log4cplus通過布局器(Layouts)來控制輸出的格式,log4cplus提供了三種類型的Layouts分別是:
            SimpleLayout、PatternLayout、和TTCCLayout。

            二.SimpleLayout
            是一種簡單格式的布局器,在輸出的原始信息之前加上LogLevel和一個"-"。
            比如以下代碼片段:
            // step 1: Instantiate an appender object
             SharedObjectPtr _append (new ConsoleAppender()); 
             _append
            ->setName("append for test");    
             
            //step 2: Instantiate a layout object 
             std::auto_ptr  _layout(new log4cplus::SimpleLayout());    
              
            //step 3: Attach the layout object to the appender     
            _append->setLayout( _layout );    

            //step 4: Instantiate a logger object 
            Logger _logger = Logger::getInstance("test");    

            //step 5: Attach the appender object to the logger  
            _logger.addAppender(_append);     

            //log activity 
            LOG4CPLUS_DEBUG(_logger, "This is the simple formatted log message")        

                     

            將打印結果:DEBUG 
            - This is the simple formatted log message

            三. PatternLayout
            是一種有詞法分析功能的模式布局器,一提起模式就會想起正則表達式,
            這里的模式和正則表達式類似,但是遠比后者簡單,能夠對預定義的標識符
            (稱為conversion specifiers)進行解析,轉換成特定格式輸出。以下代碼
            片段演示了如何使用PatternLayout:
                 
            //step 1: Instantiate an appender object 
            SharedObjectPtr _append (new ConsoleAppender());    
            _append
            ->setName("append for test");       

            //step 2: Instantiate a layout object    
            std::string pattern = "%d{%m/%d/%y %H:%M:%S}  - %m [%l]%n";    
            std::auto_ptr _layout(
            new PatternLayout(pattern));        

            //step 3: Attach the layout object to the appender 
            _append->setLayout( _layout );    

            //step 4: Instantiate a logger object 
            Logger _logger = Logger::getInstance("test_logger.subtest");    

            //step 5: Attach the appender object to the logger  
            _logger.addAppender(_append);     

            //log activity 
            LOG4CPLUS_DEBUG(_logger, "teststr")             

            輸出結果:
            10/16/04 18:51:25  - teststr [main.cpp:51]
            可以看出通過填寫特定格式的模式字符串"pattern",原始信息被包含到一堆有格式的信息當中了,
            這就使得用戶可以根據自身需要來定制顯示內容。"pattern"可以包含普通字符串和預定義的標識符,
            其中:(
            1)普通字符串,能夠被直接顯示的信息。
            2)預定義標識符,通過"%"與一個或多個字符共同構成預定義的標識符,能夠產生出特定格式信息。
               關于預定義標識符,log4cplus文檔中提供了詳細的格式說明,我每種都試了一下,以上述代碼為例,
               根據不同的pattern,各種消息格式使用情況列舉如下:
                 (1)"%%",轉義為%, 即,std::string pattern = "%%" 時輸出: "%"
                 (2)"%c",輸出logger名稱,比如std::string pattern ="%c" 時輸出: "test_logger.subtest"
                      也可以控制logger名稱的顯示層次,比如"%c{1}"時輸出"test_logger",其中數字表示層次。
                 (3)"%D",顯示本地時間,當std::string pattern ="%D" 時輸出:"2004-10-16 18:55:45",%d顯示標準時間,    
                      所以當std::string pattern ="%d" 時輸出 "2004-10-16 10:55:45" (因為我們是東8區,差8個小時啊)。
                      可以通過%d{...}定義更詳細的顯示格式,比如%d{%H:%M:%s}表示要顯示小時:分鐘:秒。大括號中可顯示的
                      預定義標識符如下:%a -- 表示禮拜幾,英文縮寫形式,比如"Fri"%A -- 表示禮拜幾,比如"Friday"%b -- 表示幾月份,
                      英文縮寫形式,
                      比如"Oct"%B -- 表示幾月份,"October"%c -- 標準的日期+時間格式,
                      如 "Sat Oct 16 18:56:19 2004"%d -- 表示今天是這個月的幾號(1-31)"16"%H -- 表示當前時刻是幾時(0-23),
                      如 "18"%I -- 表示當前時刻是幾時(1-12),如 "6"%j -- 表示今天是哪一天(1-366),
                      如 "290"%m -- 表示本月是哪一月(1-12),
                      如 "10"%M -- 表示當前時刻是哪一分鐘(0-59),
                      如 "59"%p -- 表示現在是上午還是下午, AM or PM%q -- 表示當前時刻中毫秒部分(0-999),
                      如 "237"%Q -- 表示當前時刻中帶小數的毫秒部分(0-999.999),
                      如 "430.732"%S -- 表示當前時刻的多少秒(0-59),
                      如 "32"%U -- 表示本周是今年的第幾個禮拜,以周日為第一天開始計算(0-53),
                      如 "41"%w -- 表示禮拜幾,(0-6, 禮拜天為0),
                      如 "6"%W -- 表示本周是今年的第幾個禮拜,以周一為第一天開始計算(0-53),
                      如 "41"%x -- 標準的日期格式,如 "10/16/04"%X -- 標準的時間格式,
                      如 "19:02:34"%y -- 兩位數的年份(0-99),如 "04"%Y -- 四位數的年份,
                      如 "2004"%Z -- 時區名,比如 "GMT"
                  (4)"%F",輸出當前記錄器所在的文件名稱,比如std::string pattern ="%F" 時輸出: "main.cpp"
                  (5)"%L",輸出當前記錄器所在的文件行號,比如std::string pattern ="%L" 時輸出: "51"
                  (6)"%l",輸出當前記錄器所在的文件名稱和行號,比如std::string pattern ="%L" 時輸出:     "main.cpp:51"
                  (7)"%m",輸出原始信息,比如std::string pattern ="%m" 時輸出: "teststr",即上述代碼中     LOG4CPLUS_DEBUG的第二個參數,
                      這種實現機制可以確保原始信息被嵌入到帶格式的信息中。
                  (8)"%n",換行符,沒什么好解釋的
                  (9)"%p",輸出LogLevel,比如std::string pattern ="%p" 時輸出: "DEBUG"
                  (10)"%t",輸出記錄器所在的線程ID,比如std::string pattern ="%t" 時輸出: "1075298944"
                  (11)"%x",嵌套診斷上下文NDC (nested diagnostic context) 輸出,從堆棧中彈出上下文信息,NDC可以用對
                              不同源的log信息(同時地)交叉輸出進行區分,關于NDC方面的詳細介紹會在下文中提到。
                  (12)格式對齊,比如std::string pattern ="%-10m"時表示左對齊,寬度是10,此時會輸出"teststr   ",當
                        然其它的控制字符也可以相同的方式來使用,比如"%-12d","%-5p"等等(剛接觸log4cplus文檔時還以為
                        "%-5p"整個字符串代表LogLevel呢,呵呵)。
                        
             四. TTCCLayout
            是在PatternLayout基礎上發展的一種缺省的帶格式輸出的布局器, 其格式由時間,線程ID,Logger和NDC 組成
             。提供給那些想顯示典型的信息(一般情況下夠用了)又懶得配置pattern的同志們。
             TTCCLayout在構造時有機會選擇顯示本地時間或GMT時間,缺省是按照本地時間顯示:
             TTCCLayout::TTCCLayout(bool use_gmtime  = false)
             以下代碼片段演示了如何使用TTCCLayout:
                 
                
            // step 1: Instantiate an appender object
                SharedObjectPtr _append (new ConsoleAppender());    
                _append
            ->setName("append for test");    
                
                
            //step 2: Instantiate a layout object 
                std::auto_ptr _layout(new TTCCLayout());    
                
                
            //step 3: Attach the layout object to the appender 
                _append->setLayout( _layout );    
                
                
            //step 4: Instantiate a logger object 
                Logger _logger = Logger::getInstance("test_logger");    
                
                
            //step 5: Attach the appender object to the logger  
                _logger.addAppender(_append);     
                
                
            //log activity     
                LOG4CPLUS_DEBUG(_logger, "teststr")        
                     
                
                輸出結果:
            10-16-04 19:08:27,501 [1075298944] DEBUG test_logger <> - teststr    
                當構造TTCCLayout對象時選擇GMT時間格式時:   
                          
                
            //step 2: Instantiate a layout object 
                std::auto_ptr _layout(new TTCCLayout(true));        
                     
                輸出結果:
            10-16-04 11:12:47,678 [1075298944] DEBUG test_logger <> - teststr
            */

            posted on 2011-04-02 15:43 C++技術中心 閱讀(3590) 評論(0)  編輯 收藏 引用 所屬分類: 三方庫
            欧洲国产伦久久久久久久| 久久九九亚洲精品| 国产精品99久久免费观看| 久久久久久亚洲AV无码专区| 久久久精品免费国产四虎| 97精品伊人久久久大香线蕉| 亚洲精品tv久久久久久久久久| 亚洲午夜久久久久久久久久| 色综合久久久久综合体桃花网| 国产福利电影一区二区三区久久老子无码午夜伦不 | 色婷婷综合久久久久中文一区二区| 久久久久久a亚洲欧洲aⅴ| 国产精品成人99久久久久91gav| 欧美精品福利视频一区二区三区久久久精品| 亚洲精品无码专区久久同性男| 99久久综合国产精品免费| 91秦先生久久久久久久| 99久久这里只精品国产免费| 99久久成人国产精品免费| 久久人妻少妇嫩草AV无码专区| 岛国搬运www久久| 浪潮AV色综合久久天堂| 久久精品99无色码中文字幕| 久久国产高清一区二区三区| 久久91亚洲人成电影网站| 亚洲精品美女久久久久99| 久久久WWW成人| 久久青青草原综合伊人| 嫩草伊人久久精品少妇AV| 一级女性全黄久久生活片免费 | 国产—久久香蕉国产线看观看| 亚洲AV日韩精品久久久久久久| 青青热久久国产久精品| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区 | 久久精品一区二区三区不卡| 久久天天躁狠狠躁夜夜2020一 | 中文字幕亚洲综合久久2| 久久天天躁狠狠躁夜夜网站| 性色欲网站人妻丰满中文久久不卡| 香蕉99久久国产综合精品宅男自 | 色妞色综合久久夜夜|