zoukankan      html  css  js  c++  java
  • [原创]自己写的一个简单的程序日志记录类

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

    用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

  • 相关阅读:
    Codeforces 1265A Beautiful String
    1039 Course List for Student (25)
    1038 Recover the Smallest Number (30)
    1037 Magic Coupon (25)
    1024 Palindromic Number (25)
    1051 Pop Sequence (25)
    1019 General Palindromic Number (20)
    1031 Hello World for U (20)
    1012 The Best Rank (25)
    1011 World Cup Betting (20)
  • 原文地址:https://www.cnblogs.com/absolute8511/p/1649567.html
Copyright © 2011-2022 走看看