在使用C++开发项目时,需要看程序的运行信息,可以自己写个log类,也可以用开源的,自己写的可能没有成熟的开源log功能好,本篇博客介绍log4cplus的在win10 VS2017上的编译与使用。
下面开始介绍log4cplus的编译与使用。
1. 下载源码
log4cplus链接:https://sourceforge.net/projects/log4cplus/files/log4cplus-stable
2 VS2017编译
我下载的是log4cplus-2.0.5版本,打开msvc14目录,找到log4cplus.sln用VS2017打开,一共41个项目.如果不想配置Qt, 可以把两个Qt的项目移除掉,清理项目,重新编译即可。
log4cplus的编译分unicode和多字节版,且分Debug与Release版。
如果项目用的是unicode,则需要选择unicode, 添加到项目时也得分别添加log4cplusD.lib和log4cplus.lib
只编译log4cplus也可以
如果是Release版,编译后的.lib .dll目录如下:
log4cplus-2.0.5\msvc14\x64\bin.Release
3 如何在VS2017 C++项目中使用
log4cplus和其它的SDK使用方式一样,可以用.h .lib .dll这三种文件进行配置,在项目属性中分别进行配置后就可以进行开发了,log4cplus还需要一个配置文件, 名字可以随便取,建议以.properties为后缀。
新建一个日志的单例类,如下:
MyLog.h
#pragma once
#include <iostream>
#include <string>
#include <log4cplus/logger.h>
#include <log4cplus/configurator.h>
#include <log4cplus/layout.h>
#include <log4cplus/loggingmacros.h>
#include <log4cplus/helpers/stringhelper.h>
using namespace std;
using namespace log4cplus;
using namespace log4cplus::helpers;
class MyLog
{
public:
static MyLog* getInstance();
Logger logger;
~MyLog();
private:
MyLog();
private:
//用内部类销毁单例
class GC
{
public:
~GC()
{
if (m_Log != NULL)
{
delete m_Log;
m_Log = NULL;
}
}
};
private:
static MyLog *m_Log;
static GC gc;
};
MyLog.cpp
先进行初始化,再调用配置文件,在实际项目里可以根据自己的需要进行设置。
#include "MyLog.h"
MyLog* MyLog::m_Log = NULL;
MyLog::GC MyLog::gc;
MyLog::MyLog()
{
log4cplus::initialize();
string propertyPath = "D:/VS_WorkSpace/TestLog/x64/Debug/config/logconfig.properties";
PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT(propertyPath));
logger = Logger::getRoot();
}
MyLog::~MyLog()
{
}
MyLog *MyLog::getInstance()
{
if (m_Log == NULL)
{
m_Log = new MyLog();
}
return m_Log;
}
main方法测试
#include <iostream>
#include "MyLog.h"
int main()
{
MyLog* myLog = MyLog::getInstance();
LOG4CPLUS_FATAL(myLog->logger, "DeleteService failed,errCode=[" << "123456" << "]");
LOG4CPLUS_DEBUG(myLog->logger, "Service is removed");
return 0;
}
配置文件logconfig.properties
#设置日志追加到文件尾
log4cplus.appender.APPNDER_FILE=log4cplus::RollingFileAppender
#设置日志文件大小
log4cplus.appender.APPNDER_FILE.MaxFileSize=100MB
#设置生成日志最大个数
log4cplus.appender.APPNDER_FILE.MaxBackupIndex=2
#设置输出日志路径
log4cplus.appender.APPNDER_FILE.File=D:\VS_WorkSpace\TestLog\x64\Debug\log\MyLog.log
log4cplus.appender.APPNDER_FILE.layout=log4cplus::PatternLayout
#设置日志打印格式
log4cplus.appender.APPNDER_FILE.layout.ConversionPattern=%D:%d{%Q}|%p|%t|%l|%m%n
#设置日志级别范围
log4cplus.appender.APPNDER_FILE.filters.1=log4cplus::spi::LogLevelRangeFilter
log4cplus.appender.APPNDER_FILE.filters.1.LogLevelMin=TRACE
log4cplus.appender.APPNDER_FILE.filters.1.LogLevelMax=FATAL
log4cplus.appender.APPNDER_FILE.filters.1.AcceptOnMatch=true
log4cplus.appender.APPNDER_FILE.filters.2=log4cplus::spi::DenyAllFilter
log4cplus.rootLogger=DEBUG,APPNDER_FILE
运行结果log如下
log4cplus的很多功能都需要在配置文件里进行设置,例如生成的文件名,log级别,log大小等。
比如6种log级别
TRACE ,DEBUG ,INFO ,WARN ,ERROR ,FATAL
在配置文件里,我设置的是从TRACE到FATAL, 也就是说所有的级别的信息都可以打出来,如果实际项目中,都是Release版发放程序的,一些关键的信息可以用 LOG4CPLUS_INFO 宏来打印log。
log4cplus还有很多功能,暂时先记录这么多,以后再更新。