C++ log4cplus 类库的封装

Posted oftenlin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ log4cplus 类库的封装相关的知识,希望对你有一定的参考价值。

对 log4cplus 库的封装,修改自网路

LogUtils.h

/*
 * LogUtils.h
 *
 *  Created on: 2018年8月9日
 *      Author: oftenlin
 */

#ifndef UTILS_LOGUTILS_H_
#define UTILS_LOGUTILS_H_
// LogUtils.h: interface for the LogUtils class.
//
//////////////////////////////////////////////////////////////////////

#include "log4cplus/loglevel.h"
#include "log4cplus/ndc.h"
#include "log4cplus/logger.h"
#include "log4cplus/configurator.h"
#include "iomanip"
#include "log4cplus/fileappender.h"
#include "log4cplus/layout.h"
#include <log4cplus/loggingmacros.h>

using namespace log4cplus;
using namespace log4cplus::helpers;

#define PATH_SIZE 100
//日志封装
#define TRACE(p) LOG4CPLUS_TRACE(LogUtils::_logger, p)
#define DEBUG(p) LOG4CPLUS_DEBUG(LogUtils::_logger, p)
#define NOTICE(p) LOG4CPLUS_INFO(LogUtils::_logger, p)
#define WARNING(p) LOG4CPLUS_WARN(LogUtils::_logger, p)
#define FATAL(p) LOG4CPLUS_ERROR(LogUtils::_logger, p)

// 日志控制类,全局共用一个日志
class LogUtils
{
public:
    // 打开日志
    bool open_log();

    // 获得日志实例
    static LogUtils& instance();

    static Logger _logger;

private:
    LogUtils();

    virtual ~LogUtils();

    //log文件路径及名称
    char _log_path[PATH_SIZE];
    char _log_name[PATH_SIZE];
};


#endif /* UTILS_LOGUTILS_H_ */

LogUtils.cpp

/*
 * LogUtils.cpp
 *
 *  Created on: 2018年8月9日
 *      Author: oftenlin
 */

// Log.cpp: implementation of the Log class.
//
//////////////////////////////////////////////////////////////////////

#include "LogUtils.h"
#include <memory>

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

Logger LogUtils::_logger = log4cplus::Logger::getInstance("main_log");

LogUtils::LogUtils()
{
    snprintf(_log_path, sizeof(_log_path), "%s", "./log");
    snprintf(_log_name, sizeof(_log_name), "%s/%s.%s", _log_path, "app", "log");
}

LogUtils::~LogUtils()
{
}

LogUtils& LogUtils::instance()
{
    static LogUtils log;
    return log;
}

bool LogUtils::open_log()
{

    int Log_level = 0;

    /* step 1: Instantiate an appender object */
    SharedAppenderPtr _append(new FileAppender(_log_name));
    _append->setName("file log test");

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

//    std::auto_ptr<Layout> pTTCLayout(new TTCCLayout());
    /* step 3: Attach the layout object to the appender */
    _append->setLayout(_layout);
//    _append->setLayout(pTTCLayout);
    /* step 4: Instantiate a logger object */

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

    /* step 6: Set a priority for the logger  */
    LogUtils::_logger.setLogLevel(Log_level);



    return true;
}

 

以上是关于C++ log4cplus 类库的封装的主要内容,如果未能解决你的问题,请参考以下文章

C++比较方便访问Mysql数据库的类库QTL

使用vc将C的代码封装成为DLL

log4cplus库的properties文件配置

如何将第三方类库编译自己的动态库文件中

C#调用C++类库的几种方式

MFC---简介编码结构和消息响应