zoukankan      html  css  js  c++  java
  • c++日志记录模块

    C++ 日志记录模块

    该模块从实际项目中产生,通过extern声明的方式,可在代码不同模块中生成日志,日志文件名称为随机码加用户指定名称,采用随机码是为了避免日志文件可能被覆盖的问题。

    愿意的话你也能自己构建个人的日志记录模块,本次分享的模块实现方法比较简单,可能有些地方没考虑清楚。

    源码:

    //
    // Created by jerry on 2/12/16.
    //
    
    #include <iostream>
    #include <string>
    #include <fstream>
    #include <sys/time.h>
    #include <unistd.h>
    #include <stdlib.h>
    
    namespace lg{
    	class Log {
    	private:
    	    std::string m_log_file_path;
    	    std::ofstream m_log_file;
    	    bool m_cout_flag;
    	public:
    	    Log(const std::string file_path = "run.log", const bool cout_flag = true);
    	    ~Log();
    
    	    void close();
    	    template<class T>
    	    Log & operator << (T &log_data)
    	    {
    	    	m_log_file << log_data;
    	    	m_log_file << std::flush;
    #if ((defined _RM_DEC_PRINT) && (defined _RM_DEC_LOG_PRINT))
    	    	if(m_cout_flag)
    	    		std::cout << log_data << std::flush;    		
    #endif	    
    	    	return *this;
    	    }
    	};
    
    	extern Log run_log;
    }
    
    //
    // Created by jerry on 2/12/16.
    //
    
    #include "Log.h"
    
    namespace lg{
    
    	Log run_log;
        
    	Log::Log(const std::string file_path, const bool cout_flag)
    	{
    		m_cout_flag = cout_flag;
    		// system("mkdir $HOME/data/log");
            
    	    struct timeval tv;     
    	    gettimeofday(&tv,NULL);
    	    std::random_device rd;  
    	    std::default_random_engine e(rd());  
    	    std::uniform_int_distribution<> u(0,1000000);
    	    usleep(u(e));
            
            std::string home = getenv("HOME"); 
    	    
            std::string log_file_path = home + "/data/log/" +
    	                            std::to_string((tv.tv_sec * 1000) % 1000000 + tv.tv_usec / 1000) +
    	                            std::to_string(u(e)) +
    	 							file_path;
    	    m_log_file_path = log_file_path;
    	    m_log_file.open(m_log_file_path, std::ios::app);
    	}
    
    	Log::~Log()
    	{
    	    m_log_file.close();
    	    std::cout << "-- Log Destructor successfully!" << std::endl;
    	}
    
    	void Log::close()
    	{
    		m_log_file.close();
    	}
    
    }
    

    例程:

    下述log_information为用户需要记录的日志信息。

    //file test1.cpp
    #include "Log.h"
    //...	your code here
    //...	your code here
    lg::run_log << /***log_information1 here***/ << "
    ";
    
    //file test2.cpp
    #include "Log.h"
    //...	your code here
    //...	your code here
    lg::run_log << /***log_information2 here***/ << "
    ";
    

    最终日志输出为:

    #file (rand_code)run.log
    log_information1
    log_information2
    
    分享自由,尊重著作权
  • 相关阅读:
    1046 Shortest Distance (20 分)(模拟)
    1004. Counting Leaves (30)PAT甲级真题(bfs,dfs,树的遍历,层序遍历)
    1041 Be Unique (20 分)(hash散列)
    1036 Boys vs Girls (25 分)(查找元素)
    1035 Password (20 分)(字符串处理)
    1044 Shopping in Mars (25 分)(二分查找)
    onenote使用小Tip总结^_^(不断更新中...)
    1048 Find Coins (25 分)(hash)
    三个故事
    领导者的举止
  • 原文地址:https://www.cnblogs.com/jerry323/p/9452836.html
Copyright © 2011-2022 走看看