?? 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.記錄內(nèi)容可以使用參數(shù)列表
3.可以自動標記函數(shù)進入退出時間
作者 : <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; //日志保留天數(shù)
TCHAR m_szDate[9];
static CRITICAL_SECTION m_crit;
private:
tofstream m_file; //日志文件
bool m_bOpened; //文件是否打開
LARGE_INTEGER m_nPerfFreq; //系統(tǒng)內(nèi)部定時器的時鐘頻率
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]; //記錄的內(nèi)容
};
};
#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 + -