一个小巧的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. int float BOOL enum )
  3. return
  4. 效果: 
分类: Bug调试, C/C++

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

  1. java log输出到文件路径_log4j中日志输出文件指定相对路径的方法

    log4j中日志输出文件指定相对路径的方法 1.设置在 C:/log/error.log log4j.appender.E = org.apache.log4j.RollingFileAppender ...

  2. java log输出到文件路径_Java - 配置log4j的日志文件路径 (附-获取当前类路径的多种方法)...

    1 日志路径带来的痛点 Java 项目中少不了要和log4j等日志框架打交道, 开发环境和生产环境下日志文件的输出路径总是不一致, 设置为绝对路径的方式缺少了灵活性, 每次变更项目路径都要修改文件, ...

  3. 【单片机笔记】如何编写一个清晰的串口日志输出DEBUG文件(附源码)

    前言: 相信大多数嵌入式开发者都会碰到对程序进行调试或者查找BUG的情况,常见的两种方法都是仿真和通过日志进行的.有条件仿真的是更好,单是在编写嵌入式软件程序过程中,并不是所有的硬件都支持仿真或者方便 ...

  4. swift LOG 输出

    Log 输出是程序开发中很重要的组成部分,虽然它并不是直接的业务代码,但是却可以忠实地反映我们的程序是如何工作的,以及记录程序运行的过程中发生了什么. 在 Swift 中,最简单的输出方法就是使用 p ...

  5. 基于spdlog实现日志控制台输出、文件输出或控制台+文件同时输出

    基于spdlog封装了一套接口,可实现控制台log输出.文件log输出,或控制台+文件同时输出,根据自己需求自由切换.亲测OK,分享一下. 头文件定义基类HrgLogger和三个子类ConsoleLo ...

  6. MY_Log,无缝替换原生Log,支持日志输出到文件、FirePHP

    自己扩展了一个MY_Log, 用法类似于log4j,目前支持将日志输出到文件.FirePHP. 如果你需要将日志输出到其他地方,比如邮件.数据库等,可以很方便地进行扩展. 用法很简单,大家一看就知道. ...

  7. log日志输出到文件:

    log日志输出到文件: 输出到不同的文件夹:(需要配置xml文件) <?xml version="1.0" encoding="UTF-8"?> & ...

  8. 【Python】规范脚本Log输出,将log输出到控制台同时写入文件中

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.logging模块的引入 二.logging模块的使用 1.引入库 2.创建一个logger对象 3.将日志写入文 ...

  9. linux c打印日志文件,linux c下log输出代码模板示例代码

    前言 本文主要介绍了关于linux c下log输出代码模板的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 模板 模本分为两个文件:log.c和log.h. log.c /* ...

最新文章

  1. 广播风暴系列专题(一)广播风暴:发现-端口
  2. mysql 除去列名打印_sql – 使用beeline时避免在列名中打印表名
  3. idea+JRebel实现项目热部署
  4. require.js用法简介
  5. emlog过滤html,Emlog 搜索优化 标题 + 全文搜索
  6. Android逆向笔记-使用Android Studio调试Smali代码(方式二)
  7. 信息学奥赛一本通 1942:【08NOIP普及组】ISBN号码 | OpenJudge NOI 1.7 29:ISBN号码 | 洛谷 P1055 [NOIP2008 普及组] ISBN 号码
  8. 蓝桥杯2020年第十一届Python省赛第五题-排序
  9. 未能写入输出文件拒绝访问
  10. 用AngularJS开发下一代Web应用pdf
  11. android 三星截长屏,三星如何截屏手机长图,三星四种截图方法介绍
  12. SWOT个人分析模板
  13. 每天做好一件事,坦然微笑地面对生活
  14. 快速排序(填坑与交换)
  15. 采集利器 - Web Scraper教学及示例
  16. java实现pdf旋转_java-Apache PDFBox旋转PDImageXObject
  17. 33岁跳槽无路,走投无路之际受贵人指点,成功上岸阿里(Java岗)
  18. 虹科喜报 | 虹科技术工程师【国内首批】拿下Redis认证开发者证书!
  19. 【日常学习】【数学】codevs3625 士兵站队问题题解
  20. 压力传感器电阻应变片的发展

热门文章

  1. Java模拟售票窗口代码_java多线程模拟售票,多个窗口售票
  2. 2022-01-26:最优账单平衡。 一群朋友在度假期间会相互借钱。比如说,小爱同学支付了小新同学的午餐共计 10 美元。如果小明同学支付了小爱同学的出租车钱共计 5 美元。我们可以用一个三元组 (x
  3. 《流浪地球》票房:预测10亿却飚50亿 ,大数据预测为什么这么难...
  4. 【python爬虫】js逆向:空气质量在线平台,解决反调试,加密
  5. UI设计师就业发展前景如何?
  6. 华为分析丨汽车行业报告上线,赋能车企业绩增长
  7. 安装软件时出现“error creating process错误”
  8. CocosCreator之Animation动画组件
  9. python做工控机_[Micropython]TPYBoard v202 利用单片机快速实现家庭智能控制平台
  10. references to other resources are not supported by build-time PNG generation.