C++中第三方日志Log4cpp的简单使用
log4cpp的安装
网盘的连接:链接:https://pan.baidu.com/s/1Ez7Q7tdGg9IWGdBSVtFA_g
提取码:sqpa
–来自百度网盘超级会员V5的分享
安装步骤:
1.下载log4cpp-1.1.1.tar.gz
-
安装:先将log4cpp-1.1.1.tar.gz拖入用户主目录(~),
然后再执行以下步骤:$ tar zxvf log4cpp-1.1.1.tar.gz
$ cd ~/log4cpp/
$ ./configure
$ make
$ make check
$ sudo make install这里已经安装成功.
默认lib库路径是 : /usr/local/lib/
默认头文件的位置: /usr/local/include/log4cpp
-
使用:
3.1 编译使用log4cpp库的CPP文件时,要加上库文件,才能顺利的编译通过,如下示例$ g++ log4test.cpp -llog4cpp -lpthread
3.2 运行时,如若提示缺少log4cpp库文件,表示找不到log4cpp的动态库,需要进行以下设置
以管理员身份登录终端,然后执行以下操作:a. $ sudo vim /etc/ld.so.conf
b. 在打开的文件末尾另起一行添加动态库log4cpp的路径(这里是/usr/local/lib),然后保存退出;
执行命令ldconfig使设置生效即可。
c. $ sudo ldconfig //更新库文件的缓存信息
- log4cpp学习 http://blog.csdn.net/liuhong135541/article/category/1496383
代码
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
#include <iostream>
#include <log4cpp/PatternLayout.hh>
#include <log4cpp/OstreamAppender.hh>
#include <log4cpp/Category.hh>
#include <log4cpp/Priority.hh>
#include <log4cpp/RollingFileAppender.hh>
#include <string>
using std::cout;
using std::endl;
using std::string;
using namespace log4cpp;
class Mylogger
{
public:
static Mylogger *getInstance(){
if(nullptr == _pMylogger){
_pMylogger = new Mylogger();
}
return _pMylogger;
}
void destroy(){
if(nullptr != _pMylogger){
delete this;
}
_pMylogger = nullptr;
}
void warn(const char *msg){
_root.warn(msg);
}
void error(const char *msg){
_root.error(msg);
}
void debug(const char *msg){
_root.debug(msg);
}
void info(const char *msg){
_root.info(msg);
}
private:
Mylogger(Category &root = Category::getRoot().getInstance("Mycat"))
:_root(root){
//日志的格式
PatternLayout *ppa1 = new PatternLayout();
ppa1->setConversionPattern("%d %c [%p] %m %n");
PatternLayout *ppa2 = new PatternLayout();
ppa2->setConversionPattern("%d %c [%p] %m %n");
//日志的目的地
OstreamAppender *poa = new OstreamAppender("OstreamAppender", &cout);
poa->setLayout(ppa1);
//写回滚文件
RollingFileAppender *prfa = new RollingFileAppender("RollingFileAppender123",
"cat.log",
5 *1024,
6); //其中文件有6个备用文件,1个主文件。每个文件的大小是5KB
prfa->setLayout(ppa2);
//日志的种类(记录器)
_root.setAppender(poa);
_root.setAppender(prfa);
_root.setPriority(Priority::DEBUG); //设置优先级,低于debug的优先级不会进行打印到日志里面
}
~Mylogger(){
cout << "~MyLogger()" << endl;
Category::shutdown();
}
private:
static Mylogger *_pMylogger;
Category &_root;
};
//采用宏来记录代码中的行号和函数
#define prefix(msg) string("[").append(__FILE__).append(" ").append(__FUNCTION__).append(" ")\
.append(std::to_string(__LINE__)).append("]").append(msg).c_str()
#define LogError(msg) Mylogger::getInstance()->error(prefix(msg));
#define LogInfo(msg) Mylogger::getInstance()->info(prefix(msg));
#define LogWarn(msg) Mylogger::getInstance()->warn(prefix(msg));
#define LogDebug(msg) Mylogger::getInstance()->debug(prefix(msg));
//进行单例模式的初始化
Mylogger *Mylogger::_pMylogger = nullptr;
int main()
{
//进行简单的调用
LogWarn("warn警告");
LogInfo("info提示");
LogError("error 错误");
LogDebug("debug 调试");
return 0;
}