• C++ log类


    // Log.h
    #ifndef LOG_H
    #define LOG_H
    
    #include <fstream>
    #include <string>
    #include <sstream>
    #include <ctime>
    
    using namespace std;
    
    
    /**
     * 用于输出log文件的类.
     */
    class Log
    {
    public:
        Log();
        ~Log();
    
        bool Open(string strFileName);
        void Close();
    
        bool CommonLogInit(string name); //打开默认的log 文件
    
        void Enable();
        void Disable();
    
        string GetTimeStr();
    
        template <typename T> void LogOut(const T& value)
        {
            if (m_bEnabled)
            {
                m_tOLogFile << value;
            }
        }
    
        template <typename T> void LogOutLn(const T& value)
        {
            if (m_bEnabled)
            {
                m_tOLogFile << value << endl;
            }
        }
    
        void LogOutLn()
        {
            if (m_bEnabled)
            {
                m_tOLogFile << endl;
            }
        }
    
        template <typename T> Log& operator<<(const T& value)
        {
            if (m_bEnabled)
            {
                m_tOLogFile << value;
            }
            return (*this);
        }
    
        Log& operator<<(ostream& (*_Pfn)(ostream&))
        {
            if (m_bEnabled)
            {
                (*_Pfn)(m_tOLogFile);
            }
            return (*this);
        }
    
    private:
        template<typename T> string ValueToStr(T value)
        {
            ostringstream ost;
            ost << value;
            return ost.str();
        }
    private:
        ofstream m_tOLogFile;
    
        bool m_bEnabled;
    };
    
    
    #endif
    
    //========================
    //Log.cpp
    
    #include "Log.h"
    
    Log::Log()
        :m_bEnabled(true)
    {
    }
    
    Log::~Log()
    {
    }
    
    bool Log::Open(string sFileName)
    {
        m_tOLogFile.open(sFileName.c_str(), ios_base::out | ios_base::app);
    
        if( !m_tOLogFile )
        {
            return false;
        }
    
        return true;
    }
    
    void Log::Close()
    {
        if(m_tOLogFile.is_open())
        {
            m_tOLogFile.close();
        }
    }
    
    bool Log::CommonLogInit(string name)
    {
        time_t tNowTime;
        time(&tNowTime);
    
        tm* tLocalTime = localtime(&tNowTime);
    
        //得到日期的字符串
        string sDateStr = ValueToStr(tLocalTime->tm_year+1900) + "-" +
            ValueToStr(tLocalTime->tm_mon+1) + "-" +
            ValueToStr(tLocalTime->tm_mday);
    
        return Open("e:\log\log"+ name+sDateStr + ".txt");
    }
    
    void Log::Enable()
    {
        m_bEnabled = true;
    }
    
    void Log::Disable()
    {
        m_bEnabled = false;
    }
    
    //得到当前时间的字符串
    string Log::GetTimeStr()
    {
        time_t tNowTime;
        time(&tNowTime);
    
        tm* tLocalTime = localtime(&tNowTime);
    
        //"2011-07-18 23:03:01 ";
        string strFormat = "%Y-%m-%d %H:%M:%S ";
    
        char strDateTime[30] = {''};
        strftime(strDateTime, 30, strFormat.c_str(), tLocalTime);
    
        string strRes = strDateTime;
    
        return strRes;
    }
    
    //本Log类,用于一般简单的Log文本文件输出.
    
    //test: main.cpp
    #include "Log.h"
    
    int main()
    {
        Log mainLog;
        mainLog.CommonLogInit();
    
        mainLog << mainLog.GetTimeStr() << "测试Log类." << endl;
    }
    

  • 相关阅读:
    CUBA 使用 Spring 查询接口
    Java中的数据验证
    CUBA China 最新进展
    遇见CUBA CLI
    CUBA-Platform将全面助力中国开发者
    ES6 延展操作符
    ES6 解构赋值
    Service Worker
    dom元素上添加断点(使用dom breakpoint找到修改属性的javascript代码)
    svg foreignObject的作用(文本换行,生成图片)
  • 原文地址:https://www.cnblogs.com/nafio/p/9137703.html
Copyright © 2020-2023  润新知