[原创]自己写的一个简单的日志记录类
用C++写的一个简单的日志记录类,用于跟踪程序运行状况
用途:输出程序的调试信息,记录程序运行状况,记录程序日志以便分析
用于记录程序运行过程的一些变量值和输出一些信息。可以用于DLL和exe。
写这个的初衷是由于窗口程序没有控制台,不好输出一些信息,虽然可以使用messagebox,但是如果信息过于频繁,会严重影响程序的运行。同时为了将dll中的一些信息输出也是需要输出一些信息的,这时对话框就无能为力了。
使用说明:在需要输出调试信息的地方,包含该头文件,然后使用DEBUG_TRACE_VAL(x)宏打印变量x的值,使用DEBUG_TRACE_STR(x)来输出字符串x。本类适用于ANSI和UNICODE版本。只有在debug版本的程序中才会输出日志,release版本不输出任何信息。
#ifdef _DEBUG
#ifndef _LOGGER_
#define _LOGGER_
#include <fstream>
#include <string>
#include <time.h>
#include <TChar.h>
using std::wofstream;
using std::ofstream;
#ifdef _UNICODE
#define _tofstream wofstream
#define _tstrdate _wstrdate
#define _tstrtime _wstrtime
#define tstrcat wcscat
#else
#define _tofstream ofstream
#define _tstrdate _strdate
#define _tstrtime _strtime
#define tstrcat strcat
#endif
class Logger
{
static _tofstream m_outer;
static bool m_IsOpen;
static _TCHAR curdate[30];
public:
static _tofstream& GetWritter()
{
if(!m_IsOpen)
{
m_outer.open(_T("C:\\Log"),std::ios_base::app);
if(!m_outer)
throw std::exception("create log failed.");
m_IsOpen = true;
}
//为了输出中文,需要设置locale
m_outer.imbue(std::locale("chs"));
return m_outer;
}
static void CloseWritter()
{
m_outer.close();
m_IsOpen =false;
}
//获取当前时间
static _TCHAR* GetTime()
{
_TCHAR curtime[10];
_tstrdate( curdate );
_tstrtime( curtime );
tstrcat(curdate,_T(" , "));
tstrcat(curdate,curtime);
tstrcat(curdate,_T(" : "));
return curdate;
}
~Logger()
{
m_outer.close();
m_IsOpen = false;
}
private:
Logger();
Logger(const Logger&);
Logger& operator=(const Logger&);
};
bool Logger::m_IsOpen = false;
_tofstream Logger::m_outer;
_TCHAR Logger::curdate[30];
#endif
#define DEBUG_TRACE_VAL(x) Logger::GetWritter()<<Logger::GetTime()<<#x<<_T(" = ")<<x<<std::endl;
#define DEBUG_TRACE_STR(x) Logger::GetWritter()<<Logger::GetTime()<<x<<std::endl;
#else //release版将宏定义为空
#define DEBUG_TRACE_VAL(x)
#define DEBUG_TRACE_STR(x)
#endif