一个小巧的C++Log输出到文件类

2023-05-16

一个小巧的C++Log输出到文件类 (转)

作者:wangyin159


http://www.cnblogs.com/mazhenyu/p/4139352.html


一个小巧的C++Log输出到文件类 (转)

 

http://blog.csdn.net/dpsying/article/details/17122739

有时候需要输出一些程序运行的信息,供我们不需要调试就可以直接查看程序运行状态。所以我们需要在程序中加入一些LOG输出。

适合涉及到虚拟机调试一些关于驱动等的程序时,或进行远程调试时。


搜了些log工具,不够轻……还是简单实现下吧

贴上来,可能有用的上:

Log.h

/**  
 * 用于输出log文件的类.  
 */    
  
  
#ifndef LOG_H    
#define LOG_H    
  
  
//log文件路径  
#define LOG_FILE_NAME "log.txt"  
  
//启用开关  
#define LOG_ENABLE  
    
#include <fstream>    
#include <string>    
#include <ctime>    
    
using namespace std;    
    
class CLog    
{    
public:    
    static void GetLogFilePath(CHAR* szPath)  
    {  
        GetModuleFileNameA( NULL, szPath, MAX_PATH ) ;  
        ZeroMemory(strrchr(szPath,_T('\\')), strlen(strrchr(szPath,_T('\\') ) )*sizeof(CHAR)) ;  
        strcat(szPath,"\\");  
        strcat(szPath,LOG_FILE_NAME);  
    }  
    //输出一个内容,可以是字符串(ascii)、整数、浮点数、布尔、枚举  
    //格式为:[2011-11-11 11:11:11] aaaaaaa并换行  
    template <class T>  
    static void WriteLog(T x)  
    {  
        CHAR szPath[MAX_PATH] = {0};  
        GetLogFilePath(szPath);  
  
        ofstream fout(szPath,ios::app);  
        fout.seekp(ios::end);  
        fout << GetSystemTime() << x <<endl;  
        fout.close();  
    }  
  
    //输出2个内容,以等号连接。一般用于前面是一个变量的描述字符串,后面接这个变量的值  
    template<class T1,class T2>   
    static void WriteLog2(T1 x1,T2 x2)  
    {  
        CHAR szPath[MAX_PATH] = {0};  
        GetLogFilePath(szPath);  
        ofstream fout(szPath,ios::app);  
        fout.seekp(ios::end);  
        fout << GetSystemTime() << x1 <<" = "<<x2<<endl;  
        fout.close();  
    }  
  
    //输出一行当前函数开始的标志,宏传入__FUNCTION__  
    template <class T>  
    static void WriteFuncBegin(T x)  
    {  
        CHAR szPath[MAX_PATH] = {0};  
        GetLogFilePath(szPath);  
        ofstream fout(szPath,ios::app);  
        fout.seekp(ios::end);  
        fout << GetSystemTime() << "    --------------------"<<x<<"  Begin--------------------" <<endl;  
        fout.close();  
    }  
  
    //输出一行当前函数结束的标志,宏传入__FUNCTION__  
    template <class T>  
    static void WriteFuncEnd(T x)  
    {  
        CHAR szPath[MAX_PATH] = {0};  
        GetLogFilePath(szPath);  
        ofstream fout(szPath,ios::app);  
        fout.seekp(ios::end);  
        fout << GetSystemTime() << "--------------------"<<x<<"  End  --------------------" <<endl;  
        fout.close();  
    }  
      
      
private:  
    //获取本地时间,格式如"[2011-11-11 11:11:11] ";   
    static string GetSystemTime()    
    {    
        time_t tNowTime;    
        time(&tNowTime);    
        tm* tLocalTime = localtime(&tNowTime);    
        char szTime[30] = {'\0'};    
        strftime(szTime, 30, "[%Y-%m-%d %H:%M:%S] ", tLocalTime);    
        string strTime = szTime;    
        return strTime;    
    }    
  
};    
  
#ifdef LOG_ENABLE  
  
//用下面这些宏来使用本文件  
#define LOG(x)              CLog::WriteLog(x);          //括号内可以是字符串(ascii)、整数、浮点数、bool等  
#define LOG2(x1,x2)     CLog::WriteLog2(x1,x2);  
#define LOG_FUNC        LOG(__FUNCTION__)               //输出当前所在函数名  
#define LOG_LINE        LOG(__LINE__)                       //输出当前行号  
#define LOG_FUNC_BEGIN  CLog::WriteFuncBegin(__FUNCTION__);     //形式如:[时间]"------------FuncName  Begin------------"  
#define LOG_FUNC_END     CLog::WriteFuncEnd(__FUNCTION__);      //形式如:[时间]"------------FuncName  End------------"  
  
#else  
  
#define LOG(x)                
#define LOG2(x1,x2)       
#define LOG_FUNC          
#define LOG_LINE          
#define LOG_FUNC_BEGIN    
#define LOG_FUNC_END      
  
#endif  
  
#endif    


使用:

直接在需要输出日志的地方使用宏LOG(text)就可以了,记得包含头文件Log.h。

  1. #include "Log.h"  

 

    1. BOOL   
    2.   
    3.   
    4.   
    5. int float BOOL enum )  
    6. return  
    7. 效果: 
分类:  Bug调试,  C/C++


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一个小巧的C++Log输出到文件类 的相关文章

  • android设备收到电话没有弹窗,怎么抓这个报错的log

    如果您的 Android 设备没有弹出电话窗口 xff0c 可以按照以下步骤捕获此错误的日志 xff1a 在您的 Android 设备上打开 设置 应用 在设置中 xff0c 找到 开发人员选项 并打开 在开发人员选项中 xff0c 找到
  • Android抓取log文件的方法

    很简单 xff0c 使用命令行来就可以 xff0c 步骤如下 xff1a 1 adb devices 检查调试设备是否连接好 xff0c 没有调试设备抓不了 2 adb logcat c 3 cd Desktop 进入你要存放日志文件的目录
  • Android8.0 user版本adb 的log输出到串口中

    我们在调试adb时不能使用logcat xff0c 这个时候我们需要把adb的log输出到串口 xff0c init就能实现 xff0c 我们仿造init的代码 xff0c 在adbd的main函数中调用了如下函数InitKernelLog
  • Android Studio 使用Log

    Android使用log来记录信息 xff0c 测试了下 xff0c 和system out println区别不大 xff0c 主要优势在于能使用过滤器过滤日志 本文记录基础的log使用方法 xff0c 来自 第一行代码 xff0c 以及
  • log以2为底的对数

  • linux /var/log/httpd 清理错误日志方法

    报错 xff1a 启动httpd报错 Job for httpd service failed 没有空间 linux中var磁盘满了的问题 BugSayNo的博客 CSDN博客 var目录满了有什么影响
  • 找不到系统安全日志/var/log/secure文件的问题

    今天打算配置一个服务器防止暴力破解的脚本 xff0c 原理不复杂 xff0c 搜索登录错误超过一定次数的ip地址 xff0c 加入防火墙 xff0c 但是在找登录日志的时候出现了问题 一般服务器的ssh登录等操作日志都是 var log s
  • Canal 读取 mysql bin_log

    场景 xff1a 在微服务开发的过程中多个项目协同完成一个功能 xff0c 工程与工程之间存在数据上的解耦 xff0c 底层服务为上层服务提供数据 而底层服务有需要对数据进行管理 解决方案 xff1a 基本底层服务 通过 canal 获取
  • Qt QDebug格式输出、自定义类输出及重定向输出Log

    1 qDebug 格式化输出 qDebug格式化支持printf的格式化标识符 如果向函数传递格式字符串和参数列表 xff0c 它的工作方式类似于C printf 函数 格式应该是Latin 1字符串 格式化demo 代码如下 xff08
  • logback.xml日志文件配置说明

  • 【mmdetection 】analyze_logs.py等工具测试

    绘制一些运行的分类损失 python tools analyze logs py plot curve work dirs faster rcnn r50 fpn 1x 20200306 175509 log json keys loss
  • springboot项目添加lombok日志输出控制台和log文件

    这个配置我也是在网上查找的 但是找不到出处了 首先 在resources下面建立logback spring xml文件 这个logback spring是默认springboot可以扫描到的 不用在yml中配置 也可以自己起名字 要在ap
  • 【Log日志】springboot项目中集成Log日志详解

    springboot项目中集成Log日志详解 一 Log日志介绍 1 Log 日志组件主要作用及用途 2 日志的级别Level 级别控制 3 日志的输出Import 3 1 快速使用 3 2 日志文件输出 3 3 自定义配置 4 Sprin
  • spingboot默认日志系统LogBack、Log4j和slf4j使用详解

    spingboot默认日志系统LogBack Log4j和slf4j使用详解 spingboot默认日志系统LogBack 依赖引入 Spring Boot默认使用LogBack日志系统 如果不需要更改为其他日志系统如Log4j2等 则无需
  • ELK 日志分析系统

    ELK 日志分析系统 2015 10 08 13 18 58 标签 elk 原创作品 允许转载 转载时请务必以超链接形式标明文章 原始出处 作者信息和本声明 否则将追究法律责任 http 467754239 blog 51cto com 4
  • 如何使用 Rsyslog 和 MySQL 设置 LogAnalyzer

    本文是文章的第二部分使用 MySQL 和 LogAnalyzer 设置 Rsyslog在 CentOS RHEL 系统上 在里面第一部分我们已经将Rsyslog与MySQL数据库服务器集成 所有日志现在都保存在数据库中 下面是我们在第 1
  • springboot 注解实现AOP记录日志

    AOP AOP为Aspect Oriented Programming的缩写 意为 面向切面编程 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术 在日常开发当中经常用来记录日志 方法跟踪 事务 权限等 切面方法说明 Aspe
  • 如何清除 Docker 容器的日志文件

    本教程将帮助您清除 Docker 容器上的日志文件 如果您的系统磁盘空间不足 并且您发现 docker 容器的日志文件占用了大量磁盘空间 您可以在本教程的帮助下找到日志文件位置并清除它们 清除 docker 容器的日志文件时 不需要停止它
  • python pyplot logscale 画图对数

    原文来自公众号 工程师看海 事情的起因是我要在公众号 工程师看海 更新一篇文章 介绍电感 磁珠的区别 需要画阻抗 频率曲线 横坐标频率要按照log对数尺度缩放 就写了python代码 废话不多说 先看结果 公众号后台回复 python lo
  • 让控制台输出彩色日志 windows

    经常看到一些开源软件 例如NDK编译的时候 操作系统启动的时候 打印的输出很多是彩色的 这样比较容易分辨哪些是重点 增强可读性 代码如下 cpp view plain copy include

随机推荐

  • Android的系统架构

    Android的系统架构采用了分层架构的思想 xff0c 如图1所示 从上层到底层共包括四层 xff0c 分别是应用程序程序层 应用框架层 系统库和Android运行时和Linux内核 图1 xff1a Android系统架构图 每层功能简
  • ensp实验一网络设备基本操作

    实验一 网络设备基本操作 一 实验目的 熟悉网络设备的基本配置 xff1b 掌握网络设备文件系统管理 xff1b 掌握设备的基本调试方法 二 实验学时及环境 1 实验学时 xff1a 2 2 操作系统 xff1a Windows 3 模拟环
  • sudo rosdep init出错 rosdepc update的解决方案

    https mp weixin qq com s VGs8oWdhHH6XsHcx21lN4Q 或者搜索 本文之后 xff0c 世上再无rosdep更新失败问题 xff01 如果有 小鱼就
  • pixhawk学习笔记---创建新的应用程序

    最近转到无人机领域的开发中 xff0c 感觉和以往搞android驱动差别比较大 xff0c 以前搞android驱动的时候网上的资料满天飞 xff0c 但是现在关于飞控相关的资料却少之又少 xff0c 一些资料都是从原理上入手 xff0c
  • 伽马贝塔函数

    在数理方程 概率论等学科经常遇到以下的含参变量的积分 xff0c 它们依次为第一类和第二类欧拉 xff08 Euler 1707 1783瑞士数学家 xff09 积分 xff0c 或依次称为贝塔 xff08 Bata xff09 函数和伽马
  • http-parser用法

    头文件说明 xff1a 解析类型定义 xff1a enum http parser type HTTP REQUEST HTTP RESPONSE HTTP BOTH 解析函数声明 xff1a void http parser init h
  • gazebo崩溃

    1 虚拟机下打开gazebo报错 xff1a VMware vmw ioctl command error Invalid argument INFO 1610283240 619937255 0 180000000 LeePosition
  • k8s中文网站

    https www kubernetes org cn doc 11
  • 【平衡车】PID控制原理到底如何理解?建议收藏!

    文章目录 前言PID算法PID算法的形成P算法 xff0c 即比例控制算法 I算法 xff0c 即积分控制算法D算法 xff0c 即微分控制算法PID总体的数学模型 xff1a 基于单片机的PID控制算法 xff1a 单片机中的PID算法的
  • 嵌入式C语言修炼之道.屏幕操作篇

    汉字处理 现在要解决的问题是 xff0c 嵌入式系统中经常要使用的并非是完整的汉字库 xff0c 往往只是需要提供数量有限的汉字供必要的显示功能 例如 xff0c 一个微波炉的LCD上没有必要提供显示 34 电子邮件 34 的功能 xff1
  • CDN—内容分发网络

    CDN 1 含义 CDN的全称是Content Delivery Network xff0c 即内容分发网络 CDN是构建在现有网络基础之上的智能虚拟网络 xff0c 依靠部署在各地的边缘服务器 xff0c 通过中心平台的负载均衡 内容分发
  • BeautifulSoup

    代码 xff1a from bs4 import BeautifulSoup 一个html格式的内容 doc 61 39 lt html gt lt head gt lt title gt Page title lt title gt lt
  • Ubuntu Server 22.04.1配置(配置root账号、设置固定IP、更改SSH端口、配置UFW、VM扩展磁盘后Ubuntu的扩容)

    为了能快速的创建虚拟机 xff0c 通过VM创建了一个2核CPU 4G内存 40G硬盘 xff0c 安装Ubuntu Server 22 04 1的虚拟机 xff0c 以便在需要的时候随时克隆一个新的虚拟机出来 在新的虚拟机克隆出来后可能会
  • 使用ado连接orical数据库

    使用ADO连接数据库有三种方法 xff1b 方案1 安装Orical数据库软件比方说说oracle 11g R2 32位软件 这里有一个需要注意的地方就是如果你编译的是win32如下图 xff0c 那么就必须要使用32位的数据库软件 其实在
  • QT操作 influxdb时序数据库(libcur)

    概述 最近在项目中需要用到influxdb 数据库 xff0c 当时使用了libcur库之后 xff0c 插入数据的速度一直不太理想 创建字表的速度 1W的话需要11Min xff0c 对于这样的时间完全达不到合格 经过研究进行了打包处理
  • linux中的环境变量

    临时添加环境变量的方法 exprort PATH 61 usr lib PATH export fnp 变量名称 61 变量设置值 参数说明 xff1a f 代表 变量名称 中为函数名称 n 删除指定的变量 变量实际上并未删除 xff0c
  • Linux(openEuler)没有界面连接互联网方法

    前言 系统版本openEuleropenEuler 22 03 LTS x86 64 dvd 我们在安装linux之后 xff0c 一般都是无界面的情况 大部分情况都是需要自己安装界面的 xff0c 如果路由器的情况下直接插上网络就好了 下
  • c#实现内存映射文件共享内存

    内存映射文件是利用虚拟内存把文件映射到进程的地址空间中去 xff0c 在此之后进程操作文件 xff0c 就像操作进程空间里的地址一样了 xff0c 比如使用c语言的 memcpy等内存操作的函数 这种方法能够很好的应用在需要频繁处理一个文件
  • c#Gdi画图的两种方式

    用Graphics绘图的两种方法 在学习C 画图的时候非常的蛋疼 其中的一条原因是之前没有搞过 xff0c 其中之二是办公的环境有点差 这就是我找的2种学习非常蛋疼的原因 虽然是这样但是学还是要学的 本篇文章都是在xxx paint obj
  • 一个小巧的C++Log输出到文件类

    一个小巧的C 43 43 Log输出到文件类 xff08 转 xff09 作者 xff1a wangyin159 http www cnblogs com mazhenyu p 4139352 html 一个小巧的C 43 43 Log输出