zoukankan      html  css  js  c++  java
  • 一个简单的 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(); //打开默认的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()
    {
        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("Log_" + sDateStr + ".log");
    }
    
    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] = {'\0'};
        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;
    }
  • 相关阅读:
    JS正则表达式大全(整理详细且实用)
    你真的会使用XMLHttpRequest吗?
    pyCharm最新激活码(2018激活码)
    Hibernate 中配置属性详解(hibernate.properties)
    c3p0详细配置
    使用Git上传本地项目到http://git.oschina.net
    深入理解Java:注解(Annotation)自定义注解入门
    SpringMVC文件上传与下载
    C语言开发系列-二进制
    C开发系列-include
  • 原文地址:https://www.cnblogs.com/chunyou128/p/2581890.html
Copyright © 2011-2022 走看看