VS2017使用log4cplus【完整示例与运行测试】

       在使用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还有很多功能,暂时先记录这么多,以后再更新。

发布了124 篇原创文章 · 获赞 84 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/yao_hou/article/details/103757933
今日推荐