码迷,mamicode.com
首页 > 编程语言 > 详细

c++之一个方便的日志库

时间:2021-03-30 13:09:45      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:code   一个   无法   clang   接口   剩余空间   ant   日志文件   动态   

概述

  • 本文演示环境: win10 + vs2017
  • 日志,我用的很少,通常是用作动态库调试使用。
  • 日志记录下来,基本就没看过,除非模块出现了问题。
  • 使用cmake管理的项目
  • 使用C++封装了C语言读写文件实现了的记录日志,
  • 避免使用c++流,因为效率低。
  • 默认是写文本文件,其他格式? 以后再开放接口吧
  • 因为是纯C++ 配合C语言,可以通过绝大部分编译器编译。已经通过 clang++ + msvc 编译。

项目下载

可以再 gitee 下载

日志文件接口

使用很简单:1 初始化,2,写日志,3.释放。

	/// ----------------------------------------------------------------------------------------
	/// 日志文件接口类
	/// ----------------------------------------------------------------------------------------
	class ilog
	{
	public:
		///  --------------------------------------------------------------------------------
		///  	初始化, 
		///  @info - 日志信息
		///  @return - int	
		/// 			0 - 成功
		///  --------------------------------------------------------------------------------
		virtual int init_(const oct_toolkits::st_log_info& info) = 0;




		///  --------------------------------------------------------------------------------
		///  写日志,日志内容为文本,且每一行前面都带有时间; 例如: [2021-03-28 15:00:00:001] 日志文件内容
		///  @str_log - 待写入日志文件内容
		///  @return - int	
		/// 			0 - 成功
		///				1 - 无法写入日志,可能是日志文件创建失败,或者磁盘剩余空间不足5G
		///				2 - 失败,无法创建写日志文件对象,请先初始化
		///  --------------------------------------------------------------------------------
		virtual int log_text_(const std::string& str_log) = 0;

		///  --------------------------------------------------------------------------------
		///  	写日志
		///  @pdata - 待写入内容
		///  @pdata_len - 待写入长度
		///  @return - int	
		/// 			0 - 成功、
		///				1 - 失败,参数【pdata】为空或者参数【pdata_len】为0
		///				2 - 失败,无法写入日志,可能是日志文件创建失败,或者磁盘剩余空间不足5G
		///				3 - 失败,无法写入,日志文件读写对象创建失败,请先初始化
		///  --------------------------------------------------------------------------------
		virtual int log_text_(const char* pdata, unsigned int pdata_len) = 0;

		///  --------------------------------------------------------------------------------
		///  	将参数【str_log】每个字节的16进制写入文件,全部大写
		///  @str_log - 待写入内容
		///  @return - int	
		///				0 - 成功
		/// 			1 - 无法写入日志,可能是日志文件创建失败,或者磁盘剩余空间不足5G
		///				2 - 失败,无法写入,日志文件读写对象创建失败,请先初始化
		///  --------------------------------------------------------------------------------
		virtual int log_hex_(const std::string& str_log) = 0;

		///  --------------------------------------------------------------------------------
		///  	将参数【pdata】每个字节的16进制写入文件,全部大写
		///  @pdata - 待写入内容
		///  @pdata_len - 写入内容长度
		///  @return - int	
		/// 			0 - 成功
		///				1 - 失败,参数【pdata】为空或者参数【pdata_len】为0
		///				2 - 失败,无法写入日志,可能是日志文件创建失败,或者磁盘剩余空间不足5G
		///				3 - 失败,无法写入,日志文件读写对象创建失败,请先初始化
		///  --------------------------------------------------------------------------------
		virtual int log_hex_(const char* pdata, unsigned int pdata_len) = 0;


		///  --------------------------------------------------------------------------------
		///  	释放内部资源
		///  @return - void	
		/// 			
		///  --------------------------------------------------------------------------------
		virtual void uninit_() = 0;
	};

因为项目需要,需要将数据写文本文件,且将数据写16进制,比如,字符串 "1234567890", 将每个字符的ASCII的十六进制写文件。

完整使用范例

#include <iostream>
#include <oct_toolkits.h>
void call_log_()
{

	using namespace oct_toolkits;
	using namespace std;
	/// 创建文件对象
	ilog* plog = create_ilog_();
	if (NULL == plog)
	{
		cout << "call_log, plog = null";
		return;
	}


	st_log_info info;
	info.path_					= std::string("C:\\game\\file_demo\\log\\send");
	info.prefix_				= std::string("C");
	info.postfix_				= std::string("fc");
	info.type_					= std::string(".log");

	int ret						= plog->init_(info);
	if (0						!= ret)
	{
		cout << "call log, init, ret =" << ret;
	}

	else
	{
		cout << "call log, init success";
	}
	/// ----------------------------------------------------------------------------------------

	/// 写文本
	std::string str_text("1234567890");
	plog->log_text_(str_text);
	char arr2[] = {"9876543210"};
	plog->log_text_(arr2, 10);

	/// 写十六进制
	plog->log_hex_(str_text);
	plog->log_hex_(arr2, 10);

	plog = release_ilog_(plog);

}


int main(int argc, char* argv[], char* env[])
{

	//call_file();
	call_log_();


	//system("pause");
	return 0;
}

日志文件内容

技术图片

c++之一个方便的日志库

标签:code   一个   无法   clang   接口   剩余空间   ant   日志文件   动态   

原文地址:https://www.cnblogs.com/pandamohist/p/14589444.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!