Log4cpp 库安装及使用

Log4cpp 库安装及使用

2017-07-28 22:34:16 cuixuange 阅读数 768更多

分类专栏: C++设计模式

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/u014297722/article/details/76284227

日志C++库 log4cpp 
安装: 源码安装 ./configure;make; make check; makeinstall 
掌握: layout fileappender category的使用 
编译选项: -llog4cpp -lpthread

运行时,如若提示缺少log4cpp库文件,表示找不到log4cpp的动态库,需要进行以下设置
    以管理员身份登录终端,然后执行以下操作:

    a. # vim /etc/ld.so.conf

    b. 在打开的文件末尾添加动态库log4cpp的路径(这里是/usr/local/lib),然后保存退出;
       执行命令ldconfig使设置生效即可。
    c. # ldconfig   //更新库文件的缓存信息

//g++ log4cpp.cc  -llog4cpp -lpthread  -std=c++11

//单例模式下的log4cpp简单封装
//log4cpp PatternLayout(定义输出格式) FileAppender(定义输出文件形式)  Category(日志种类),add 各种类型appender

#include <log4cpp/Category.hh>
#include <log4cpp/Priority.hh>
#include <log4cpp/PatternLayout.hh>
#include <log4cpp/FileAppender.hh>
#include <log4cpp/RollingFileAppender.hh>
#include <iostream>
#include <sstream>
#include <string>

using std::cout;
using std::endl;
using std::ostringstream;
using std::string;
using namespace log4cpp;
#define RollingFileName "roll_log4cpp.log"

class Mylog4cpp{
public:
    static Mylog4cpp * getInstance(){            //单例模式
        if(_instance==NULL)
            _instance = new Mylog4cpp();
        return _instance;
    }
    ~Mylog4cpp();
    void logInfo (const string & Message);    
    void logError(const string & Message);
    void logWarn (const string & Message);
    void logDebug(const string & Message);
private:
    Category & _root;                   //引用避免了再次复制root对象
private:
    static Mylog4cpp * _instance;
    Mylog4cpp();
};

Mylog4cpp * Mylog4cpp::_instance=NULL;          //静态成员类外初始化

Mylog4cpp::Mylog4cpp()
:_root(Category::getRoot())
{
    PatternLayout * _ptnLyout = new PatternLayout();
    _ptnLyout->setConversionPattern("%d{%Y/%m/%d %H:%M:%S} [%5p] :%m%n");             //PatternLayout定义布局格式 
    RollingFileAppender * _rollingFileAppender = new RollingFileAppender("rollingFileAppender", RollingFileName,5 * 1024,2) ; //设置回卷格式fileappender
    _rollingFileAppender->setLayout(_ptnLyout);

    _root.addAppender(_rollingFileAppender);   //可以多次add不同类型的appender 实现向不同流输出
    _root.setPriority(Priority::DEBUG);
}

Mylog4cpp::~Mylog4cpp(){
    //delete _ptnLyout;
    //delete _rollingFileAppender;
    Category::shutdown();
}

void Mylog4cpp::logInfo (const string & Message){
    string Message2=Message;
    Message2 += __FILE__;
    Message2 += ".";
    Message2 += __FUNCTION__;
    Message2 += ".";
    Message2 += std::to_string(__LINE__);
    _root.info(Message2);     
}       
void Mylog4cpp::logError (const string & Message){
    string Message2=Message;
    Message2 += __FILE__;
    Message2 += ".";
    Message2 += __FUNCTION__;
    Message2 += ".";
    Message2 += std::to_string(__LINE__);
    _root.error(Message2);      
}
void Mylog4cpp::logWarn (const string & Message){
    string Message2=Message;
    Message2 += __FILE__;
    Message2 += ".";
    Message2 += __FUNCTION__;
    Message2 += ".";
    Message2 += std::to_string(__LINE__);
    _root.warn(Message2);      
}
void Mylog4cpp::logDebug (const string & Message){
    string Message2=Message;
    Message2 += __FILE__;
    Message2 += ".";
    Message2 += __FUNCTION__;
    Message2 += ".";
    Message2 += std::to_string(__LINE__);   
    _root.debug(Message2);     
}

int main(void)
{
    Mylog4cpp *mylog4cpp1=Mylog4cpp::getInstance();           //单例模式测试
    Mylog4cpp *mylog4cpp2=Mylog4cpp::getInstance();
    Mylog4cpp *mylog4cpp3=Mylog4cpp::getInstance();
    Mylog4cpp *mylog4cpp4=Mylog4cpp::getInstance();
    cout<<"addr1: "<< mylog4cpp1<<endl;
    cout<<"addr1: "<< mylog4cpp2<<endl;
    cout<<"addr1: "<< mylog4cpp3<<endl;
    cout<<"addr1: "<< mylog4cpp4<<endl;

    for(size_t idx = 0; idx != 10; ++idx)
    {
        ostringstream oss;
        oss <<"  "<<__FUNCTION__<<".";
        mylog4cpp1->logInfo(oss.str());
        mylog4cpp2->logError(oss.str());
        mylog4cpp3->logWarn(oss.str());
        mylog4cpp4->logDebug(oss.str());
    }
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值