⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 logger.h

📁 一个完善高效的的Wince5.0下记录log的类
💻 H
字号:
#pragma once

#include <string>
#include <fstream>
using namespace std;

#ifdef _UNICODE
#define tstring wstring
#define tofstream wofstream
#else
#define tstring string
#define tofstream ofstream
#endif

// CLogger
/*! @class
********************************************************************************
<PRE>
类名   : CLogger
功能   : 记录程序日志
描述   :	1.使用唯一的文件句柄。
			2.记录内容可以使用参数列表
			3.可以自动标记函数进入退出时间

作者   : <chyanbo>
</PRE>
*******************************************************************************/
class CLogger 
{
public:
	CLogger(void);
	~CLogger(void);

public:
	static CLogger* GetLogFile();
	static void ClearLogFile();
	void Write(LPCTSTR strLevel, LPCTSTR strType, LPCTSTR pszFormat, ...);
	void Open();
	void Close();
private:
	void GetTimeStr(LPTSTR strTime, size_t length);
public:
	static long nLogLevel;				//等级
	static long nLogPeriod;				//日志保留天数
	TCHAR m_szDate[9];
	static CRITICAL_SECTION  m_crit;
private:
	tofstream		m_file;				//日志文件
	bool			m_bOpened;			//文件是否打开
	LARGE_INTEGER	m_nPerfFreq;		//系统内部定时器的时钟频率
public:
	struct Marker 
	{
		Marker(LPCTSTR pszFormat,...)
		{
			if (nLogLevel <= 1)
			{
				memset(m_szEntry, 0, sizeof(m_szEntry));
				va_list args;
				va_start(args, pszFormat);
				int nSize = _vsntprintf(m_szEntry, sizeof(m_szEntry)/sizeof(TCHAR), pszFormat, args);
				va_end(args);

				CLogger::GetLogFile()->Write(_T("DEBUG"), NULL, _T(">> %s"), m_szEntry);
			}

		}
		~Marker()
		{
			if (nLogLevel <= 1)
			{
				CLogger::GetLogFile()->Write(_T("DEBUG"), NULL, _T("<< %s"), m_szEntry);
			}
		}
	private:
		TCHAR m_szEntry[128];	//记录的内容
	};
};

#define LOG_SETTING(level, period) \
	{\
		InterlockedExchange(&CLogger::nLogLevel, level); \
		InterlockedExchange(&CLogger::nLogPeriod, period); \
	}

#define LOG_ERROR_T(T, ...) \
	if (CLogger::nLogLevel <= 3)\
	{\
		CLogger::GetLogFile()->Write(_T("ERROR"), T, __VA_ARGS__);\
	}

#define LOG_ERROR(...) \
	LOG_ERROR_T(NULL, __VA_ARGS__)

#define LOG_INFO_T(T, ...) \
	if (CLogger::nLogLevel <= 2)\
	{\
		CLogger::GetLogFile()->Write(_T("INFO "), T, __VA_ARGS__);\
	}

#define LOG_INFO(...) \
	LOG_INFO_T(NULL, __VA_ARGS__)


#define LOG_DATA_T(T, ...) \
	if (CLogger::nLogLevel <= 1)\
	{\
		CLogger::GetLogFile()->Write(_T("DATA "), T, __VA_ARGS__);\
	}

#define LOG_DATA(...) \
	LOG_DATA_T(NULL, __VA_ARGS__)


#define LOG_DEBUG_T(T, ...) \
	if (CLogger::nLogLevel <= 0)\
	{\
		CLogger::GetLogFile()->Write(_T("DEBUG"), T, __VA_ARGS__);\
	}

#define LOG_DEBUG(...) \
	LOG_DEBUG_T(NULL, __VA_ARGS__)


#define LOG_MARKER(...) \
	CLogger::Marker marker(__VA_ARGS__);\

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -