• <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 楊粼波 閱讀(8279) 評論(0)  編輯 收藏 引用 所屬分類: Windows編程Linux編程

            无码人妻久久一区二区三区免费 | 国产精品久久久久影院嫩草 | 香蕉久久影院| 久久久国产精品网站| 久久久久人妻一区二区三区vr | 国产精品久久久久…| 国产精品毛片久久久久久久| 人妻丰满AV无码久久不卡| 国内精品久久久久久久久电影网 | 久久久久高潮毛片免费全部播放| 国产成人精品综合久久久| 亚洲中文字幕久久精品无码喷水 | 中文字幕无码久久久| 日韩中文久久| 无码国内精品久久人妻| 久久久久人妻精品一区| 久久久91精品国产一区二区三区| 91麻豆精品国产91久久久久久 | 青草影院天堂男人久久| 国产精品无码久久久久| 伊人热热久久原色播放www| 伊人久久大香线蕉综合Av| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 99久久99久久精品免费看蜜桃| www性久久久com| 久久亚洲精品无码播放| 日韩中文久久| 日日噜噜夜夜狠狠久久丁香五月| 久久99精品久久久久久久不卡| 国产激情久久久久影院老熟女免费 | 一极黄色视频久久网站| 久久午夜羞羞影院免费观看| 66精品综合久久久久久久| 久久人人爽人人爽AV片| 无码人妻久久一区二区三区 | 久久久WWW成人免费精品| 亚洲精品乱码久久久久久按摩| 88久久精品无码一区二区毛片| 亚洲国产成人久久一区WWW| 粉嫩小泬无遮挡久久久久久| 日本欧美国产精品第一页久久|