自己写的一个简单的程序日志记录类

[原创]自己写的一个简单的日志记录类

用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

你可能感兴趣的:(日志)