一个简单明了的c++ trace log 实现

本文介绍了如何实现一个满足线程安全、分级过滤、记录时间线程ID等需求的C++日志跟踪系统。该系统具有跨平台特性,并支持回调处理。文中给出了头文件、实现文件的代码示例,以及在notepad++中查看日志文件的效果展示。
摘要由CSDN通过智能技术生成

基本要求是
1.线程安全
2.支持分级过滤
3.记录时间,线程id,开始记录头等等
4.跨平台
5.支持回调处理

代码是考虑过跨平台的,主要是锁跟几个函数,有需要改动的地方应该很少,但目前还没做,因为要浪费时间测试呢,往后有需要再改改就是了。

废话不多说上代码

头文件

/*
* CREATE: tifentan
* DATE: 2017/10/30
* MODIFY: 2017/10/30
* NOTE:
*   trace.h 
* 
*
*/


#ifndef  TTF_TRACE_H_
#define TTF_TRACE_H_

#include <string>

enum TtfTraceLevel
{
	ttfTraceNone = 0x0000,    // no trace
	ttfTraceStateInfo = 0x0001,
	ttfTraceWarning = 0x0002,
	ttfTraceError = 0x0004,
	ttfTraceCritical = 0x0008,
	ttfTraceApiCall = 0x0010,
	ttfTraceModuleCall = 0x0020,

	ttfTraceInfo = 0x0040,
	ttfTraceDebugFlag = 0x007f,
	ttfTraceDebug = 0x0080,

	ttfTraceDefault = 0x00ff,

	ttfTraceMemory = 0x0100,   // memory info
	ttfTraceTimer = 0x0200,   // timing info
	ttfTraceStream = 0x0400,   // "continuous" stream of data

	// Non-verbose level used by LS_INFO of logging.h. Do not use directly.
	ttfTraceTerseInfo = 0x2000,

	ttfTraceAll = 0xffff
};

enum TtfTraceMode {
	ttfTraceModeNone,
	ttfTraceModeEnd = 0x0ffff,
};


// External Trace API
class TtfTraceCallback {
public:
	virtual void Print(TtfTraceLevel level, const char* message, int length) = 0;

protected:
	virtual ~TtfTraceCallback() {}
	TtfTraceCallback() {}
};


#define TTF_TRACE_MAX_MESSAGE_SIZE 1024
#define TTF_TRACE_MAX_FILE_SIZE 100000000 //100m

class TtfTrace {
public:
	TtfTrace();
	~TtfTrace();

	int SetFile(char* path);
	int SetCallBack(TtfTraceCallback* cb);
	int SetFilter(unsigned int filter);
	unsigned int GetFilter();

	int doTrace(const TtfTraceLevel level, 
		const char msg[TTF_TRACE_MAX_MESSAGE_SIZE],
		const TtfTraceMode module = ttfTraceModeNone,
		const int32_t id = 0);
	int doTraceEx(const TtfTraceLevel level,
		const TtfTraceMode module,
		const int32_t id,
		char* str,
		...);

	int Flush();
	int Rewind();
	unsigned int GetSize();

protected:
	int AddThreadId(char* ptr);
	int AddTime(char* ptr);
	int AddHead(char* ptr);
	int AddLevel(char* ptr, TtfTraceLevel level);
	int AddModuleAndId(char* ptr, TtfTraceMode module,int32_t id);
	int WriteToFile();

private:
	TtfTraceCallback *cb_;
	CRITICAL_SECTION crit_;
	std::string trace_file_path_;
	FILE* file_ = nullptr;
	size_t position_ = 0;
	unsigned int level_filter_ = ttfTraceDefault;
	//unsigned int prev_tick_count_ = 0;
	char* msg_ = 0;
	int msg_len_ = 0;
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值