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

            頭文件:
            /**********************************************************************
            * Copyright (C) 2008 - - All Rights Reserved
            *
            * 文件名稱:        LoggerModule.h
            * 摘    要:        日志包裹類,日志模塊的接口
            *     
            * 作    者:        yanglinbo, 
            * 修    改:        查看文件最下方.

            **********************************************************************
            */


            #ifndef __LoggerModule_H__
            #define __LoggerModule_H__


            //導出定義
            #ifndef LOGGER_MODULE_CLASS
                #ifdef  LOGGER_MODULE_DLL
                    
            #define LOGGER_MODULE_CLASS _declspec(dllexport)
                
            #else
                    
            #define LOGGER_MODULE_CLASS _declspec(dllimport)
                
            #endif
            #endif

            //模塊定義
            #ifdef _DEBUG
                
            #define LOGGER_MODULE_DLL_NAME    TEXT("LoggerModuleD.dll")            //組件 DLL 名字
            #else
                
            #define LOGGER_MODULE_DLL_NAME    TEXT("LoggerModule.dll")            //組件 DLL 名字
            #endif


            /// 包裹類
            /// @note 在程序啟動的時候調用Logger::Start方法,例如:
            ///       g_Logger.StartSystem("logModule.properties");
            ///       打日志的示例如下:
            ///       g_Logger.Debug(__FILE__, __LINE__, "Debug log[%d]", 100);
            ///       用法基本上和printf()和CSting::Format()方法差不多。
            ///       如果是VS2005以及以上的開發環境,可以使用宏打日志,更加方便:
            ///       LOG_DEBUG("Debug log[%d]", 100);

            class LOGGER_MODULE_CLASS Logger
            {
            public:
                Logger();
                
            virtual ~Logger();

                
            /// 啟動日志系統
                
            /// @param[in] properties_filename 日志系統配置文件文件名

                void StartSystem(const char* properties_filename);

                
            /// 關閉日志系統
                void StopSystem();

            public:
                
            void Debug(const char* filename, const int fileline, const char* pFormat, );

                
            void Error(const char* filename, const int fileline, const char* pFormat, );

                
            void Fatal(const char* filename, const int fileline, const char* pFormat, );

                
            void Info(const char* filename, const int fileline, const char* pFormat, );

                
            void Warn(const char* filename, const int fileline, const char* pFormat, );

                
            void Trace(const char* filename, const int fileline, const char* pFormat, );

            public:
                
            static inline Logger* getSingletonPtr()
                
            {
                    
            return &getSingleton();
                }

                
            static inline Logger& getSingleton()
                
            {
                    
            static Logger _instance; 
                    
            return _instance;
                }

            }
            ;
            #define g_Logger Logger::getSingleton()
            #define g_pLogger Logger::getSingleton()


            //////////////////////////////////////////////////////////////////////////
            // 斷言日志
            //////////////////////////////////////////////////////////////////////////
            #define ASSERT_LOG(expr)\
                
            if ( (expr) ) {;} else g_Logger.Error(__FILE__, __LINE__, #expr);


            //////////////////////////////////////////////////////////////////////////
            // 以下的宏只有VS2005以及之上的版本可以使用!因為VS2005之下的版本不支持可變參數宏
            //////////////////////////////////////////////////////////////////////////
            #if defined(_MSC_VER) && _MSC_VER > 1400 
                
            #define LOG_DEBUG()    g_Logger.Debug(__FILE__, __LINE__, __VA_ARGS__);
                
            #define LOG_ERROR()    g_Logger.Error(__FILE__, __LINE__, __VA_ARGS__);
                
            #define LOG_FATAL()    g_Logger.Fatal(__FILE__, __LINE__, __VA_ARGS__);
                
            #define LOG_INFO()    g_Logger.Info(__FILE__, __LINE__, __VA_ARGS__);
                
            #define LOG_WARN()    g_Logger.Warn(__FILE__, __LINE__, __VA_ARGS__);
                
            #define LOG_TRACE()    g_Logger.Trace(__FILE__, __LINE__, __VA_ARGS__);
            #endif


            #endif


            cpp文件:
            /**********************************************************************
            * Copyright (C) 2008 -  - All Rights Reserved
            *
            * 文件名稱:        LoggerModule.cpp
            * 摘    要:        日志包裹類,日志模塊的接口
            *     
            * 作    者:        yanglinbo, 
            * 修    改:        查看文件最下方.

            **********************************************************************
            */


            #include 
            "LoggerModule.h"

            #include 
            <cstdlib>
            #include 
            <iostream>
            #include 
            <log4cplus/config.hxx>
            #include 
            <log4cplus/logger.h>
            #include 
            <log4cplus/configurator.h>
            #include 
            <log4cplus/helpers/loglog.h>
            #include 
            <log4cplus/helpers/stringhelper.h>
            #include 
            <log4cplus/helpers/socket.h>
            #include 
            <log4cplus/helpers/threads.h>
            #include 
            <log4cplus/spi/loggerimpl.h>
            #include 
            <log4cplus/spi/loggingevent.h>
            //#include <stdarg.h>

            Logger::Logger()
            {

            }


            Logger::
            ~Logger()
            {
                log4cplus::Logger _logger 
            = log4cplus::Logger::getRoot();
                LOG4CPLUS_INFO(_logger, 
            "Logger System Stop Finish.");
            }


            #define DO_LOGGER(logLevel, filename, fileline, pFormat, bufSize)\
                log4cplus::Logger _logger 
            = log4cplus::Logger::getRoot();\
                \
                
            if(_logger.isEnabledFor(logLevel))\
            {                \
                va_list args;            \
                va_start(args, pFormat);        \
                
            char buf[bufSize] = {0};        \
                _vsnprintf(buf, 
            sizeof(buf), pFormat, args);    \
                va_end(args);           \
                _logger.forcedLog(logLevel, buf, filename, fileline); \
            }


            void Logger::Debug( const char* filename, const int fileline, const char* pFormat,  )
            {
                DO_LOGGER(log4cplus::DEBUG_LOG_LEVEL, filename, fileline, pFormat, 
            1024);
            }


            void Logger::Error( const char* filename, const int fileline, const char* pFormat,  )
            {
                DO_LOGGER(log4cplus::ERROR_LOG_LEVEL, filename, fileline, pFormat, 
            256);
            }


            void Logger::Fatal( const char* filename, const int fileline, const char* pFormat,  )
            {
                DO_LOGGER(log4cplus::FATAL_LOG_LEVEL, filename, fileline, pFormat, 
            256);
            }


            void Logger::Info( const char* filename, const int fileline, const char* pFormat,  )
            {
                DO_LOGGER(log4cplus::INFO_LOG_LEVEL, filename, fileline, pFormat, 
            512);
            }


            void Logger::Warn( const char* filename, const int fileline, const char* pFormat,  )
            {
                DO_LOGGER(log4cplus::WARN_LOG_LEVEL, filename, fileline, pFormat, 
            256);
            }


            void Logger::Trace( const char* filename, const int fileline, const char* pFormat,  )
            {
                DO_LOGGER(log4cplus::TRACE_LOG_LEVEL, filename, fileline, pFormat, 
            1024);
            }


            void Logger::StartSystem( const char* properties_filename )
            {
                
            if (properties_filename==NULL) return;

                log4cplus::helpers::LogLog::getLogLog()
            ->setInternalDebugging(false);
                log4cplus::PropertyConfigurator::doConfigure(properties_filename);
                log4cplus::Logger _logger 
            = log4cplus::Logger::getRoot();
                LOG4CPLUS_INFO(_logger, 
            "Logger System Start Finish.");
            }


            void Logger::StopSystem()
            {

            }


            自定義配置文件樣例:
            # Define the root logger
            log4cplus.rootLogger
            =TRACE, consoleAppender, fileAppender

            # Define a file appender named 
            "consoleAppender"
            log4cplus.appender.consoleAppender
            =log4cplus::ConsoleAppender
            log4cplus.appender.consoleAppender.layout
            =log4cplus::PatternLayout
            log4cplus.appender.consoleAppender.layout.ConversionPattern
            =%-5p-[%t][%D{%H:%M:%%Q}]%m

            # Define a file appender named 
            "fileAppender"
            log4cplus.appender.fileAppender
            =log4cplus::DailyRollingFileAppender
            log4cplus.appender.fileAppender.MaxFileSize
            =200KB
            log4cplus.appender.fileAppender.File
            =./log.log
            log4cplus.appender.fileAppender.MaxBackupIndex
            =3
            log4cplus.appender.fileAppender.layout
            =log4cplus::PatternLayout
            log4cplus.appender.fileAppender.layout.ConversionPattern
            =%d{%m/%d/%%H:%M:%S}  - %m [%l]%n

            使用的例子:
                g_Logger.StartSystem("logModule.properties");
                g_Logger.Debug(__FILE__, __LINE__, 
            "Debug log[%d]"100);

            打印出來的結果如下所示:
            06/08/09 10:52:42  - Logger System Start Finish. [e:\workspace\共享組件\日志組件\loggermodule.cpp:32]
            06/08/09 10:52:42  - Debug log[100] [e:\workspace\服務器組件\好友服務器\friendserverdlg.cpp:160]
            06/08/09 10:52:44  - Logger System Stop Finish. [e:\workspace\共享組件\日志組件\loggermodule.cpp:38]




            參考資料:
            1. 在VC2003中編譯x264  http://203.208.35.132/search?q=cache:iVR-sSgopycJ:xieliming.blogspot.com/2008/12/vc2003x264.html+%E5%AE%8F+%E5%8F%AF%E5%8F%98%E5%8F%82+vc2003&cd=7&hl=zh-CN&ct=clnk&gl=cn&client=aff-os-maxthon&st_usg=ALhdy28fuo_AwxsIvnD2K3IRGbPD8wlJJQ
            2. 我的Log4c http://www.shnenglu.com/cool-liangbing/archive/2009/02/12/73532.html
            3.【原創】技術系列之 必備外圍功能-log http://www.shnenglu.com/CppExplore/archive/2009/02/08/52216.html

            posted on 2009-06-08 20:19 楊粼波 閱讀(3183) 評論(1)  編輯 收藏 引用

            評論

            # re: log4cplus的包裹類(log4cplus Wrapper) 2012-08-13 16:17 yinghui12

            樓主,你好。我最近在學習log4cplus庫。看到你封裝的一個類。但是現在我遇到一些問題。出現很多鏈接錯誤,但是我對應的庫都添加了。不知道什么問題。樓主能不能給我發一下這個封裝類能夠運行的一個工程?謝謝了。
            郵箱:yinghui12@gmail.com  回復  更多評論   

            九九精品久久久久久噜噜| 久久99精品国产自在现线小黄鸭| 久久精品人人做人人妻人人玩| 国产香蕉97碰碰久久人人| 国产精品欧美久久久久天天影视| 国产精品久久成人影院| 久久精品黄AA片一区二区三区 | 久久精品无码专区免费青青| 亚洲精品无码久久久久| 亚洲va久久久噜噜噜久久狠狠 | 久久综合色老色| 亚洲国产成人久久综合一区77| 久久久99精品一区二区| 香蕉久久久久久狠狠色| 久久精品国产亚洲AV蜜臀色欲| 亚洲va国产va天堂va久久| 国内精品伊人久久久久av一坑| 日本福利片国产午夜久久| 亚洲精品久久久www| 欧美熟妇另类久久久久久不卡| 狠狠色噜噜狠狠狠狠狠色综合久久| 99久久www免费人成精品| 精品久久久久国产免费| 久久婷婷五月综合97色直播| 99久久精品影院老鸭窝| 精品国产乱码久久久久久浪潮| 狠狠色丁香婷婷久久综合| 97精品伊人久久大香线蕉app| 久久午夜综合久久| 久久久久无码精品国产| 欧美久久久久久午夜精品| 中文字幕无码免费久久| 伊人热人久久中文字幕| 久久久精品国产| 99久久精品免费看国产| 99久久99久久精品国产片果冻| 一本大道加勒比久久综合| 伊人久久大香线蕉综合Av| 久久久久亚洲AV无码专区桃色| 97超级碰碰碰久久久久| 亚洲精品乱码久久久久久中文字幕 |