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***/ << "\n";
//file test2.cpp
#include "Log.h"
//...   your code here
//...   your code here
lg::run_log << /***log_information2 here***/ << "\n";

最终日志输出为:

#file (rand_code)run.log
log_information1
log_information2

原文地址:https://www.cnblogs.com/jerry323/p/9452836.html

时间: 2024-10-27 16:15:26

c++日志记录模块的相关文章

[ Python入门教程 ] Python中日志记录模块logging使用实例

python中的logging模块用于记录日志.用户可以根据程序实现需要自定义日志输出位置.日志级别以及日志格式. 将日志内容输出到屏幕 一个最简单的logging模块使用样例,直接打印显示日志内容到屏幕. import logging logging.critical("critical log") logging.error("error log") logging.warning("warning log") logging.info(&q

Python 日志记录模块logging的使用

shell当中记录log,满眼花花的重定向符合,看着很不爽有没有!我喜欢python,就是喜欢这种买个手电筒,备用电池都准备好了的感觉.logging模块很简单,导入模块,定义日志格式.代码中就可以通过logging.info(),logging.warning(),logging.debug()记录日志了.而且立刻感觉整个人好了很多-- import logging logging.basicConfig(level=logging.DEBUG,                 format=

python3 logging 日志记录模块

#coding:utf-8 import logginglogging.basicConfig(filename='log1.log', format='%(asctime)s -%(name)s-%(levelname)s-%(module)s:%(message)s', datefmt='%Y-%m-%d %H:%M:%S %p', level=logging.DEBUG) while True: option = input("input a digit:") if option

IIS 7完全攻略之日志记录配置(摘自网络)

IIS 7完全攻略之日志记录配置 作者:泉之源 [IT168 专稿]除了 Windows 提供的日志记录功能外,IIS 7.0 还可以提供其他日志记录功能.例如,可以选择日志文件格式并指定要记录的请求. (一)启用或禁用日志记录 如果希望 IIS 基于配置的条件有选择地记录特定的服务器请求,就应为服务器启用日志记录.一旦启用了服务器日志记录,就可以为服务器上的任意站点启用选择性日志记录.然后,还可以查看日志文件,以了解失败和成功的请求. 如果不再希望 IIS 有选择地记录对某个站点的请求,则应为

MVC使用 Elmah 日志记录组件

简介 ELMAH(Error Logging Modules and Handlers)错误日志记录模块和处理程序,是一种应用广泛的错误日志工具是完全可插拔.它可以动态添加到一个正在运行的ASP.NET Web应用程序,甚至是一台机器上的所有ASP.NET Web应用程序,而无需重新编译或重新部署. ELMAH既支持ASP.NET Web Forms 又支持 ASP.NET MVC.你可以对ELMAH进行配置来存储各种不同的错误(XML文件,事件日志,Access数据库,SQL数据库,Oracl

slf4j+logback搭建超实用的日志管理模块

文章转自http://www.2cto.com/kf/201702/536097.html slf4j+logback搭建超实用的日志管理模块(对日志有编号管理):日志功能在服务器端再常见不过了,我们非常有必要记录下发生在服务器上的活动,这些日志将用于debug.统计等各种用途. slf4j+logback这种实现方式是很常见的,好处自然是方便!.在这篇文章中,你将看到如何使用logback搭建你自己的日志组件并将日志输出到文件.如何查看这些文件.如何为每个线程上的访问分配独有的一个日志id.

关于日志记录的总结

前段时间,公司的一个项目,需要做很多的数据接口和同步程序,于是就遇到了日志记录的问题,何时记录,如何记录,哪些要记哪些不用记等问题.针对日志记录的问题,经过一系列讨论,终于达成了统一的处理办法.解决了各个模块系统,不同的开发人员,日志记录不统一,随意的问题.今天终于抽出时间把这个问题总结并结合网络上的资料,进行整理. 为什么要记录日志 记录日志是调试程序,监视程序运行的一种重要的方式,主要有两个目的:bug的及时发现和定位,显示程序运行状态.正确详细的日志记录能够快速的定位问题.同样,通过查看日

rsyslog日志记录服务器

一.syslog系统 1.syslog:系统日志服务,统一日志管理 支持C/S架构:可通过UDP或TCP协议提供日志记录服务:实现集中收集日志功能 (1)日志.事件 历史事件日志,保存系统上过去一段时间的发生的事件 事件:系统引导启动.应用程序启动.应用程序尤其是服务类应用程序运行过程中的一些事件: (2)syslog种类 syslogd:system系统日志 klogd:kernel内核日志 2.syslog格式 事件产生的日期时间               主机        进程[pid

log4js-Node.js中的日志管理模块使用与封装

开发过程中,日志记录是必不可少的事情,尤其是生产系统中经常无法调试,因此日志就成了重要的调试信息来源. Node.js,已经有现成的开源日志模块,就是log4js,源码地址:点击打开链接 项目引用方法: npm install log4js 1.配置说明(仅以常用的dateFile日志类型举例,更多说明参考log4js-wiki): { "appenders": [ // 下面一行应该是用于跟express配合输出web请求url日志的 {"type": "