📄 logger.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 + -