log4cplus的包裹类(log4cplus Wrapper)-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

log4cplus的包裹类(log4cplus Wrapper)

简介:
头文件:
ExpandedBlockStart.gif/**********************************************************************
InBlock.gif* Copyright (C) 2008 - - All Rights Reserved
InBlock.gif*
InBlock.gif* 文件名称:        LoggerModule.h
InBlock.gif* 摘    要:        日志包裹类,日志模块的接口
InBlock.gif*     
InBlock.gif* 作    者:        yanglinbo, 
InBlock.gif* 修    改:        查看文件最下方.
InBlock.gif
ExpandedBlockEnd.gif**********************************************************************
*/

None.gif
None.gif#ifndef __LoggerModule_H__
None.gif#define __LoggerModule_H__
None.gif
None.gif
None.gif//导出定义
None.gif
#ifndef LOGGER_MODULE_CLASS
None.gif    #ifdef  LOGGER_MODULE_DLL
None.gif        #define LOGGER_MODULE_CLASS _declspec(dllexport)
None.gif    #else
None.gif        #define LOGGER_MODULE_CLASS _declspec(dllimport)
None.gif    #endif
None.gif#endif
None.gif
None.gif//模块定义
None.gif
#ifdef _DEBUG
None.gif    #define LOGGER_MODULE_DLL_NAME    TEXT("LoggerModuleD.dll")            //组件 DLL 名字
None.gif#else
None.gif    #define LOGGER_MODULE_DLL_NAME    TEXT("LoggerModule.dll")            //组件 DLL 名字
None.gif#endif
None.gif
None.gif
ExpandedBlockStart.gif/// 包裹类
InBlock.gif
/// @note 在程序启动的时候调用Logger::Start方法,例如:
InBlock.gif
///       g_Logger.StartSystem("logModule.properties");
InBlock.gif
///       打日志的示例如下:
InBlock.gif
///       g_Logger.Debug(__FILE__, __LINE__, "Debug log[%d]", 100);
InBlock.gif
///       用法基本上和printf()和CSting::Format()方法差不多。
InBlock.gif
///       如果是VS2005以及以上的开发环境,可以使用宏打日志,更加方便:
ExpandedBlockEnd.gif
///       LOG_DEBUG("Debug log[%d]", 100);

None.gifclass LOGGER_MODULE_CLASS Logger
ExpandedBlockStart.gif{
InBlock.gifpublic:
InBlock.gif    Logger();
InBlock.gif    virtual ~Logger();
InBlock.gif
ExpandedSubBlockStart.gif    /// 启动日志系统
ExpandedSubBlockEnd.gif    
/// @param[in] properties_filename 日志系统配置文件文件名

InBlock.gif    void StartSystem(const char* properties_filename);
InBlock.gif
ExpandedSubBlockStart.gif    /// 关闭日志系统
InBlock.gif    void StopSystem();
InBlock.gif
InBlock.gifpublic:
InBlock.gif    void Debug(const char* filename, const int fileline, const char* pFormat, dot.gif);
InBlock.gif
InBlock.gif    void Error(const char* filename, const int fileline, const char* pFormat, dot.gif);
InBlock.gif
InBlock.gif    void Fatal(const char* filename, const int fileline, const char* pFormat, dot.gif);
InBlock.gif
InBlock.gif    void Info(const char* filename, const int fileline, const char* pFormat, dot.gif);
InBlock.gif
InBlock.gif    void Warn(const char* filename, const int fileline, const char* pFormat, dot.gif);
InBlock.gif
InBlock.gif    void Trace(const char* filename, const int fileline, const char* pFormat, dot.gif);
InBlock.gif
InBlock.gifpublic:
InBlock.gif    static inline Logger* getSingletonPtr()
ExpandedSubBlockStart.gif    {
InBlock.gif        return &getSingleton();
ExpandedSubBlockEnd.gif    }

InBlock.gif    static inline Logger& getSingleton()
ExpandedSubBlockStart.gif    {
InBlock.gif        static Logger _instance; 
InBlock.gif        return _instance;
ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}
;
None.gif#define g_Logger Logger::getSingleton()
None.gif#define g_pLogger Logger::getSingleton()
None.gif
None.gif
ExpandedBlockStart.gif//////////////////////////////////////////////////////////////////////////
None.gif// 断言日志
ExpandedBlockStart.gif
//////////////////////////////////////////////////////////////////////////
None.gif#define ASSERT_LOG(expr)\
ExpandedBlockStart.gif    if ( (expr) ) {;} else g_Logger.Error(__FILE__, __LINE__, #expr);
None.gif
None.gif
ExpandedBlockStart.gif//////////////////////////////////////////////////////////////////////////
None.gif// 以下的宏只有VS2005以及之上的版本可以使用!因为VS2005之下的版本不支持可变参数宏
ExpandedBlockStart.gif
//////////////////////////////////////////////////////////////////////////
None.gif#if defined(_MSC_VER) && _MSC_VER > 1400 
None.gif    #define LOG_DEBUG(dot.gif)    g_Logger.Debug(__FILE__, __LINE__, __VA_ARGS__);
None.gif    #define LOG_ERROR(dot.gif)    g_Logger.Error(__FILE__, __LINE__, __VA_ARGS__);
None.gif    #define LOG_FATAL(dot.gif)    g_Logger.Fatal(__FILE__, __LINE__, __VA_ARGS__);
None.gif    #define LOG_INFO(dot.gif)    g_Logger.Info(__FILE__, __LINE__, __VA_ARGS__);
None.gif    #define LOG_WARN(dot.gif)    g_Logger.Warn(__FILE__, __LINE__, __VA_ARGS__);
None.gif    #define LOG_TRACE(dot.gif)    g_Logger.Trace(__FILE__, __LINE__, __VA_ARGS__);
None.gif#endif
None.gif
None.gif
None.gif#endif
None.gif


cpp文件:
ExpandedBlockStart.gif/**********************************************************************
InBlock.gif* Copyright (C) 2008 -  - All Rights Reserved
InBlock.gif*
InBlock.gif* 文件名称:        LoggerModule.cpp
InBlock.gif* 摘    要:        日志包裹类,日志模块的接口
InBlock.gif*     
InBlock.gif* 作    者:        yanglinbo, 
InBlock.gif* 修    改:        查看文件最下方.
InBlock.gif
ExpandedBlockEnd.gif**********************************************************************
*/

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

None.gifLogger::Logger()
ExpandedBlockStart.gif{
InBlock.gif
ExpandedBlockEnd.gif}

None.gif
None.gifLogger::~Logger()
ExpandedBlockStart.gif{
InBlock.gif    log4cplus::Logger _logger = log4cplus::Logger::getRoot();
InBlock.gif    LOG4CPLUS_INFO(_logger, "Logger System Stop Finish.");
ExpandedBlockEnd.gif}

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

None.gif
None.gifvoid Logger::Debug( const char* filename, const int fileline, const char* pFormat, dot.gif )
ExpandedBlockStart.gif{
InBlock.gif    DO_LOGGER(log4cplus::DEBUG_LOG_LEVEL, filename, fileline, pFormat, 1024);
ExpandedBlockEnd.gif}

None.gif
None.gifvoid Logger::Error( const char* filename, const int fileline, const char* pFormat, dot.gif )
ExpandedBlockStart.gif{
InBlock.gif    DO_LOGGER(log4cplus::ERROR_LOG_LEVEL, filename, fileline, pFormat, 256);
ExpandedBlockEnd.gif}

None.gif
None.gifvoid Logger::Fatal( const char* filename, const int fileline, const char* pFormat, dot.gif )
ExpandedBlockStart.gif{
InBlock.gif    DO_LOGGER(log4cplus::FATAL_LOG_LEVEL, filename, fileline, pFormat, 256);
ExpandedBlockEnd.gif}

None.gif
None.gifvoid Logger::Info( const char* filename, const int fileline, const char* pFormat, dot.gif )
ExpandedBlockStart.gif{
InBlock.gif    DO_LOGGER(log4cplus::INFO_LOG_LEVEL, filename, fileline, pFormat, 512);
ExpandedBlockEnd.gif}

None.gif
None.gifvoid Logger::Warn( const char* filename, const int fileline, const char* pFormat, dot.gif )
ExpandedBlockStart.gif{
InBlock.gif    DO_LOGGER(log4cplus::WARN_LOG_LEVEL, filename, fileline, pFormat, 256);
ExpandedBlockEnd.gif}

None.gif
None.gifvoid Logger::Trace( const char* filename, const int fileline, const char* pFormat, dot.gif )
ExpandedBlockStart.gif{
InBlock.gif    DO_LOGGER(log4cplus::TRACE_LOG_LEVEL, filename, fileline, pFormat, 1024);
ExpandedBlockEnd.gif}

None.gif
None.gifvoid Logger::StartSystem( const char* properties_filename )
ExpandedBlockStart.gif{
InBlock.gif    if (properties_filename==NULL) return;
InBlock.gif
InBlock.gif    log4cplus::helpers::LogLog::getLogLog()->setInternalDebugging(false);
InBlock.gif    log4cplus::PropertyConfigurator::doConfigure(properties_filename);
InBlock.gif    log4cplus::Logger _logger = log4cplus::Logger::getRoot();
InBlock.gif    LOG4CPLUS_INFO(_logger, "Logger System Start Finish.");
ExpandedBlockEnd.gif}

None.gif
None.gifvoid Logger::StopSystem()
ExpandedBlockStart.gif{
InBlock.gif
ExpandedBlockEnd.gif}

None.gif

自定义配置文件样例:
None.gif# Define the root logger
None.giflog4cplus.rootLogger=TRACE, consoleAppender, fileAppender
None.gif
None.gif# Define a file appender named "consoleAppender"
None.giflog4cplus.appender.consoleAppender=log4cplus::ConsoleAppender
None.giflog4cplus.appender.consoleAppender.layout=log4cplus::PatternLayout
ExpandedBlockStart.giflog4cplus.appender.consoleAppender.layout.ConversionPattern=%-5p-[%t][%D{%H:%M:%S %Q}]%m
None.gif
None.gif# Define a file appender named "fileAppender"
None.giflog4cplus.appender.fileAppender=log4cplus::DailyRollingFileAppender
None.giflog4cplus.appender.fileAppender.MaxFileSize=200KB
None.giflog4cplus.appender.fileAppender.File=./log.log
None.giflog4cplus.appender.fileAppender.MaxBackupIndex=3
None.giflog4cplus.appender.fileAppender.layout=log4cplus::PatternLayout
ExpandedBlockStart.giflog4cplus.appender.fileAppender.layout.ConversionPattern=%d{%m/%d/%y %H:%M:%S}  - %m [%l]%n
None.gif

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

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: