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

  • 相关阅读:
    android开发环境搭建日记和嵌入式Android开发环境初探
    QT210 android2.3 和android4.0 烧写编译日记
    RAM,SRAM,DRAM,SDRAM,DDR RAM,ROM,PROM,EPROM,EEPROM,NAND FLASH,NOR FLASH的区别
    如何修改终端用户名颜色修改为红色(可以自由定制)
    FPGA机器学习之stanford机器学习第三堂2
    FPGA机器学习之stanford机器学习第三堂1
    FPGA机器学习之stanford机器学习第二堂2
    FPGA机器学习之stanford机器学习第二堂1
    FPGA机器学习之stanford机器学习第一堂
    FPGA片外存储器ddr2之DQSn引脚的分析
  • 原文地址:https://www.cnblogs.com/absolute8511/p/1649567.html
Copyright © 2011-2022 走看看