• <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(二)

            本文介紹了使用log4cplus有六個步驟,并提供了一些例子引導你了解log4cplus的基本使用。

            				
            ### 基本使用 ###
            使用log4cplus有六個基本步驟:
            1. 實例化一個appender對象
            2. 實例化一個layout對象
            3. 將layout對象綁定(attach)到appender對象
            4. 實例化一個logger對象,調用靜態函數:log4cplus::Logger::getInstance("logger_name")
            5. 將appender對象綁定(attach)到logger對象,如省略此步驟,標準輸出(屏幕)appender對象會綁定到logger
            6. 設置logger的優先級,如省略此步驟,各種有限級的消息都將被記錄
            下面通過一些例子來了解log4cplus的基本使用。
            〖例1〗
            /*    嚴格實現步驟1-6,appender輸出到屏幕, 其中的布局格式和LogLevel后面會詳細解釋。*/
            #include 
            <log4cplus/logger.h>
            #include 
            <log4cplus/consoleappender.h>
            #include 
            <log4cplus/layout.h>
            using namespace log4cplus;
            using namespace log4cplus::helpers;
            int main()
            {
                
            /* 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");
                
            /* step 5: Attach the appender object to the logger  */
                _logger.addAppender(_append);
                
            /* step 6: Set a priority for the logger  */
                _logger.setLogLevel(ALL_LOG_LEVEL);
                 
            /* log activity */ 
               LOG4CPLUS_DEBUG(_logger, 
            "This is the FIRST log message")
                sleep(
            1);
                LOG4CPLUS_WARN(_logger, 
            "This is the SECOND log message")
                
            return 0;
            }

            輸出結果:
            10/14/04 09:06:24  - This is the FIRST log message... [main.cpp:31]
            10/14/04 09:06:25  - This is the SECOND log message... [main.cpp:33]
            				
            〖例2〗
            /*    簡潔使用模式,appender輸出到屏幕。*/
            #include 
            <log4cplus/logger.h>
            #include 
            <log4cplus/consoleappender.h>
            using namespace log4cplus;
            using namespace log4cplus::helpers;
            int main()
            {
                
            /* step 1: Instantiate an appender object */
                SharedAppenderPtr _append(
            new ConsoleAppender());
                _append
            ->setName("append test");
                
            /* 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 FIRST log message")
                sleep(
            1);
                LOG4CPLUS_WARN(_logger, 
            "This is the SECOND log message")
                
            return 0;
            }

            輸出結果:
            DEBUG - This is the FIRST log message...
            WARN - This is the SECOND log message...
            				
            〖例3〗
            /*    iostream模式,appender輸出到屏幕。*/
            #include 
            <log4cplus/logger.h>
            #include 
            <log4cplus/consoleappender.h>
            #include 
            <iomanip> 
            /* 其實這個東東還是放到log4cplus頭文件中比較合適些,個人意見:) */
            using namespace log4cplus;
            int main()
            {
                
            /* step 1: Instantiate an appender object */
             SharedAppenderPtr _append(
            new ConsoleAppender()); 
               _append
            ->setName("append test");
                
            /* 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_TRACE(_logger, 
            "This is"  << " just a t" << "est." << std::endl) 
              LOG4CPLUS_DEBUG(_logger, 
            "This is a bool: " << true
               LOG4CPLUS_INFO(_logger, 
            "This is a char: " << 'x')
                LOG4CPLUS_WARN(_logger, 
            "This is a int: " << 1000)
                LOG4CPLUS_ERROR(_logger, 
            "This is a long(hex): " << std::hex << 100000000
             LOG4CPLUS_FATAL(_logger, 
            "This is a double: "  << std::setprecision(15)  << 1.2345234234)
                
            return 0;
            }


            輸出結果:
            DEBUG - This is a bool: 1
            INFO - This is a char: x
            WARN - This is a int: 1000
            ERROR - This is a long(hex): 5f5e100
            FATAL - This is a double: 1.2345234234
            				
            〖例4〗
            /*    調試模式,通過loglog來控制輸出調試、警告或錯誤信息,appender輸出到屏幕。*/
            #include 
            <iostream>
            #include 
            <log4cplus/helpers/loglog.h>
            using namespace log4cplus::helpers;
            void printMsgs(void)

               std::cout 
            << "Entering printMsgs()" << std::endl; 
               LogLog::getLogLog()
            ->debug("This is a Debug statement");
                LogLog::getLogLog()
            ->warn("This is a Warning");
                LogLog::getLogLog()
            ->error("This is a Error"); 
               std::cout 
            << "Exiting printMsgs()" << std::endl << std::endl;
            }

            int main()

               
            /*       LogLog類實現了debug, warn, error 函數用于輸出調試、警告或錯誤信息,       同時提供了兩個方法來進一步控制所輸出的信息,其中:
                   setInternalDebugging方法用來控制是否屏蔽輸出信息中的調試信息,當輸入參數為false則屏蔽,缺省設置為false。
                   setQuietMode方法用來控制是否屏蔽所有輸出信息,當輸入參數為true則屏蔽,       缺省設置為false。
                   LogLog::getLogLog()->setInternalDebugging(false);    
            */

                printMsgs();
                std::cout 
            << "Turning on debug" << std::endl;    LogLog::getLogLog()->setInternalDebugging(true);    printMsgs();
                std::cout 
            << "Turning on quiet mode" << std::endl; 
               LogLog::getLogLog()
            ->setQuietMode(true); 
               printMsgs();
                
            return 0;
            }

            輸出結果:
            Entering printMsgs()...
            log4cplus:WARN This is a Warning...
            log4cplus:ERROR This is a Error...
            Exiting printMsgs()...
            Turning on debug...
            Entering printMsgs()...
            log4cplus: This is a Debug statement...
            log4cplus:WARN This is a Warning...
            log4cplus:ERROR This is a Error...
            Exiting printMsgs()...
            Turning on quiet mode...
            Entering printMsgs()...
            Exiting printMsgs()...
            需要指出的是,輸出信息中總是包含"log4cplus:"前綴,有時候會感覺不爽,這是因為LogLog在實現時候死定了要這么寫:
            LogLog::LogLog() : mutex(LOG4CPLUS_MUTEX_CREATE),
               debugEnabled(
            false),
               quietMode(
            false),
               PREFIX( LOG4CPLUS_TEXT(
            "log4cplus: ") ), 
              WARN_PREFIX( LOG4CPLUS_TEXT
            "log4cplus:WARN ") ), 
              ERR_PREFIX( LOG4CPLUS_TEXT
            "log4cplus:ERROR ") ){}
            你可以把這些前綴換成自己看著爽的提示符號,然后重新編譯,hihi。除非萬不得已或者實在郁悶的不行,否則還是不要這樣干。
            				
            〖例5〗
            /*    文件模式,appender輸出到文件。*/
            #include <log4cplus/logger.h>
            #include <log4cplus/fileappender.h>
            using namespace log4cplus;
            int main()
            {    
            /* step 1: Instantiate an appender object */
                SharedAppenderPtr _append(new FileAppender("Test.log"));
                _append
            ->setName("file log test");
                
            /* step 4: Instantiate a logger object */
                Logger _logger = Logger::getInstance("test.subtestof_filelog");
                
            /* step 5: Attach the appender object to the logger  */
                _logger.addAppender(_append);
                
            /* log activity */
                int i;
                
            for( i = 0; i < 5++i )
                {
                    LOG4CPLUS_DEBUG(_logger, 
            "Entering loop #" << i << "End line #")
                }
                
            return 0;
            }
            輸出結果(Test.log文件):
            DEBUG - Entering loop #0End line #
            DEBUG - Entering loop #1End line #
            DEBUG - Entering loop #2End line #
            DEBUG - Entering loop #3End line #
            DEBUG - Entering loop #4End line #

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

            91久久精品国产免费直播| 久久精品亚洲中文字幕无码麻豆| 国产aⅴ激情无码久久| 欧美日韩精品久久久久| 99久久99久久精品国产| 色成年激情久久综合| 久久91精品久久91综合| 一级做a爱片久久毛片| 久久精品国产精品青草app| 久久久久国产精品| 91精品国产色综久久 | 欧美一区二区久久精品| 久久精品亚洲乱码伦伦中文| 品成人欧美大片久久国产欧美| 国产叼嘿久久精品久久| 久久国产热这里只有精品| 人妻中文久久久久| 久久久久久国产精品美女| 久久久久亚洲AV无码网站| 国产成人久久激情91| 99久久精品免费| 精品久久久久久无码人妻热| 婷婷久久精品国产| 一本色道久久88精品综合| 97精品国产91久久久久久| 国产精品午夜久久| 亚洲精品久久久www| 久久夜色精品国产网站| 国产成人99久久亚洲综合精品| 国产农村妇女毛片精品久久| 狠狠色丁香久久婷婷综合图片 | 久久国产高清一区二区三区| 性做久久久久久久久老女人| 少妇久久久久久被弄高潮| 99久久99久久精品国产| 狠狠色丁香久久婷婷综合_中| 久久国产精品成人影院| 久久91精品国产91久| 7777精品久久久大香线蕉| 91麻精品国产91久久久久| 久久久久99这里有精品10|