基于log4cplus库封装日志管理


这算是我正式上班后的第一篇CSDN文章,这也是一个上级安排的工作,也参考了很多的文章,会在本篇文章最后列出几篇文章。

log4cplus下载和编译

下载地址

我下载的是最新的logcplus _2.0.7
link
作者的GitHub地址
link

编译运行

下载过后自行解压就行,我用的是CMake的GUI做批量处理,解压好的文件下有一个cmakelist.txt的文件这个应该是32位和64都可以。
成功后直接点击打开工程就好了,或者找到你build的路径,在Vs下进行生成即可,下图那么多的项目我们只需要对log4cplus的项目生成即可,其余demo有需要的可以参考。最后生成的生成我们需要的静态库和动态库。
在这里插入图片描述

封装log4cplus

头文件

#pragma once
#define LOG_I log::Initializers().getInstance
#define logi  log::Initializers().Info

enum LogType
{
	PLUGIN = 0,
	LOG = 1
};

class log
{
public:
     log();
	~log();
	
	static inline Wukonglog& Initializers()
	{
		static Wukonglog _instance;
		return _instance;
	}
	
	void getInstance();
	void Info(int,const char* szFormat,...);
};

cpp文件

#include "log.h"
#include<Windows.h>
using namespace log4cplus;

#define  _ARGS_ 	                    \
	     log4cplus::Logger m_LogPlugin = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("plugin"));\
         log4cplus::Logger m_LogAll = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("logall"));\
         char buff[1024];               \
         memset(buff, 0, sizeof(buff)); \
         va_list args;                  \
         va_start(args, Format);        \
         vsprintf_s(buff, Format, args);\
         va_end(args);                  \

log::log() {}

log::~log() {
	log4cplus::Logger m_LogPlugin = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("plugin"));
	log4cplus::Logger m_LogAll = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("logall"));
	LOG4CPLUS_INFO(m_LogAll, "LogAll system Finish...");
	LOG4CPLUS_INFO(m_LogPlugin, "LogPlugin system Finish...");
}

void log::getInstance() {
	//log4cplus::initialize();
	log4cplus::Initializer();//初始化
	log4cplus::PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT("logconfigure.ini"));//导入配置文件
	log4cplus::Logger m_LogPlugin = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("plugin"));
	log4cplus::Logger m_LogAll = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("logall"));
	LOG4CPLUS_INFO(m_LogAll, "LogAll system start.");
	LOG4CPLUS_INFO(m_LogPlugin, "LogPlugin system start.");
}

void log::Info(int logtype, const char* Format, ...) {
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 
		FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE);
	_ARGS_
		if (logtype)
			LOG4CPLUS_INFO(m_LogAll, buff);
		else
			LOG4CPLUS_INFO(m_LogPlugin, buff);
}

log4cplus配置(与代码部分匹配)

在你的文本文件中写入如下面的文本,在初始化log4cplu后调用配置函数将配置导入log4cplus::PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT("logconfigure.ini"));
log4cplus.logger.logall=ALL,loglog,logConsole

#logConsole 
log4cplus.appender.logConsole=log4cplus::ConsoleAppender
##控制台过滤输出范围
log4cplus.appender.logConsole.filters.1=log4cplus::spi::LogLevelRangeFilter
log4cplus.appender.logConsole.filters.1.LogLevelMin=INFO
log4cplus.appender.logConsole.filters.1.LogLevelMax=ERROR
#格式
log4cplus.appender.logConsole.layout=log4cplus::PatternLayout
log4cplus.appender.logConsole.layout.ConversionPattern=[%D{%Y-%m-%d %H:%M:%S:%q}][%-4p]  %-30m[%c]%n

#loglog
log4cplus.appender.loglog=log4cplus::TimeBasedRollingFileAppender
log4cplus.appender.loglog.FilenamePattern=wukonglog\wukonglog%d{MM-dd}.log
log4cplus.appender.loglog.Schedule=DAILY

log4cplus.appender.loglog.MaxHistory=14
log4cplus.appender.loglog.Append=true
log4cplus.appender.loglog.RollOnClose=false
log4cplus.appender.loglog.CreateDirs=true

log4cplus.appender.loglog.MaxFileSize=10MB
log4cplus.appender.loglog.MaxBackupIndex=5
log4cplus.appender.loglog.layout=log4cplus::PatternLayout
log4cplus.appender.loglog.layout.ConversionPattern=[%D{%Y-%m-%d %H:%M:%S:%q}][%-4p]  %-30m%n

总结

我想要一个能输出两个不同的日志,一个负责主程序的问题,一个负责通讯程序的日志,但是每个日志在程序运行时都能输出到控制台上,这样可以快速定位问题。这几句话特别重要,这样在pluin中输出的文本日志就不会重复输出到控制台显示的日志中去了。

log4cplus.logger.logall=ALL,loglog,logConsole
log4cplus.logger.plugin=ALL,logplugin,logConsole
##不向上层传输日志
log4cplus.additivity.plugin=false

因为之前没有封装过单例类的问题,都是生成动态类的,所以在此花了不少时间。

参考文章:
https://blog.csdn.net/yizhangbiao/article/details/81541582 link
https://blog.csdn.net/kakiebu/article/details/105501833 link

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值