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

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

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

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

贴上来,可能有用的上:

Log.h

  1. /**
  2. * 用于输出log文件的类.
  3. */
  4. #ifndef LOG_H
  5. #define LOG_H
  6. //log文件路径
  7. #define LOG_FILE_NAME "log.txt"
  8. //启用开关
  9. #define LOG_ENABLE
  10. #include <fstream>
  11. #include <string>
  12. #include <ctime>
  13. using namespace std;
  14. class CLog
  15. {
  16. public:
  17. static void GetLogFilePath(CHAR* szPath)
  18. {
  19. GetModuleFileNameA( NULL, szPath, MAX_PATH ) ;
  20. ZeroMemory(strrchr(szPath,_T('\\')), strlen(strrchr(szPath,_T('\\') ) )*sizeof(CHAR)) ;
  21. strcat(szPath,"\\");
  22. strcat(szPath,LOG_FILE_NAME);
  23. }
  24. //输出一个内容,可以是字符串(ascii)、整数、浮点数、布尔、枚举
  25. //格式为:[2011-11-11 11:11:11] aaaaaaa并换行
  26. template <class T>
  27. static void WriteLog(T x)
  28. {
  29. CHAR szPath[MAX_PATH] = {0};
  30. GetLogFilePath(szPath);
  31. ofstream fout(szPath,ios::app);
  32. fout.seekp(ios::end);
  33. fout << GetSystemTime() << x <<endl;
  34. fout.close();
  35. }
  36. //输出2个内容,以等号连接。一般用于前面是一个变量的描述字符串,后面接这个变量的值
  37. template<class T1,class T2>
  38. static void WriteLog2(T1 x1,T2 x2)
  39. {
  40. CHAR szPath[MAX_PATH] = {0};
  41. GetLogFilePath(szPath);
  42. ofstream fout(szPath,ios::app);
  43. fout.seekp(ios::end);
  44. fout << GetSystemTime() << x1 <<" = "<<x2<<endl;
  45. fout.close();
  46. }
  47. //输出一行当前函数开始的标志,宏传入__FUNCTION__
  48. template <class T>
  49. static void WriteFuncBegin(T x)
  50. {
  51. CHAR szPath[MAX_PATH] = {0};
  52. GetLogFilePath(szPath);
  53. ofstream fout(szPath,ios::app);
  54. fout.seekp(ios::end);
  55. fout << GetSystemTime() << "    --------------------"<<x<<"  Begin--------------------" <<endl;
  56. fout.close();
  57. }
  58. //输出一行当前函数结束的标志,宏传入__FUNCTION__
  59. template <class T>
  60. static void WriteFuncEnd(T x)
  61. {
  62. CHAR szPath[MAX_PATH] = {0};
  63. GetLogFilePath(szPath);
  64. ofstream fout(szPath,ios::app);
  65. fout.seekp(ios::end);
  66. fout << GetSystemTime() << "--------------------"<<x<<"  End  --------------------" <<endl;
  67. fout.close();
  68. }
  69. private:
  70. //获取本地时间,格式如"[2011-11-11 11:11:11] ";
  71. static string GetSystemTime()
  72. {
  73. time_t tNowTime;
  74. time(&tNowTime);
  75. tm* tLocalTime = localtime(&tNowTime);
  76. char szTime[30] = {'\0'};
  77. strftime(szTime, 30, "[%Y-%m-%d %H:%M:%S] ", tLocalTime);
  78. string strTime = szTime;
  79. return strTime;
  80. }
  81. };
  82. #ifdef LOG_ENABLE
  83. //用下面这些宏来使用本文件
  84. #define LOG(x)              CLog::WriteLog(x);          //括号内可以是字符串(ascii)、整数、浮点数、bool等
  85. #define LOG2(x1,x2)     CLog::WriteLog2(x1,x2);
  86. #define LOG_FUNC        LOG(__FUNCTION__)               //输出当前所在函数名
  87. #define LOG_LINE        LOG(__LINE__)                       //输出当前行号
  88. #define LOG_FUNC_BEGIN  CLog::WriteFuncBegin(__FUNCTION__);     //形式如:[时间]"------------FuncName  Begin------------"
  89. #define LOG_FUNC_END     CLog::WriteFuncEnd(__FUNCTION__);      //形式如:[时间]"------------FuncName  End------------"
  90. #else
  91. #define LOG(x)
  92. #define LOG2(x1,x2)
  93. #define LOG_FUNC
  94. #define LOG_LINE
  95. #define LOG_FUNC_BEGIN
  96. #define LOG_FUNC_END
  97. #endif
  98. #endif

使用:

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

  1. #include "Log.h"
    1. BOOL
    2. int
      float
      BOOL
      enum

      )

    3. return
    4. 效果:

一个小巧的C++Log输出到文件类 (转)的更多相关文章

  1. 重构qDebug()<<,使log输出到文件

    重构qDebug()<<,使log输出到文件 #include <QProcessEnvironment> #include <QDateTime> #includ ...

  2. 【记录】尝试用android-logging-log4j去实现log输出内容到sd卡中的文件的功能

    [背景] 折腾: [记录]给Android中添加log日志输出到文件 期间,已经试了: [记录]尝试用android中microlog4android实现log输出到文件的功能 但是不好用. 然后就是 ...

  3. ios 将Log日志重定向输出到文件中保存

    对于真机,日志没法保存,不好分析问题.所以有必要将日志保存到应用的Docunment目录下,并设置成共享文件,这样才能取出分析. 首先是日志输出,分为c的printf和标准的NSLog输出,print ...

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

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

  5. loadrunner脚本中写入脚本输出log到外部文件,分析参数取值方式

    loadrunner脚本中写入脚本输出log到外部文件,分析参数取值方式 分类: 心得 loadrunner 我的测试 2012-04-01 12:52 2340人阅读 评论(0) 收藏 举报 脚本l ...

  6. loadrunner脚本中参数化和返回值输出log到外部文件

    loadrunner脚本中参数化和返回值输出log到外部文件 很多时候,我们在做性能测试之前,需要造数据,但是使用的这些参数化数据和生成的返回数据在后面的测试都会用的,所以我们需要在造数据过程中,将参 ...

  7. android:分享 一个很强大的LOG开关---Log.isLoggable

    标签:android分享 一个很强大的log开 1.API亮点: 此API可以实现不更换APK,在出问题的手机上就直接能抓到有效log,能提升不少工作效率. 2.API介绍 最近在解决短信问题时,看到 ...

  8. Node.js系列文章:利用console输出日志文件

    通常我们在写Node.js程序时,都习惯使用console.log打印日志信息,但这也仅限于控制台输出,有时候我们需要将信息输出到日志文件中,实际上利用console也可以达到这个目的的,今天就来简单 ...

  9. ASP.NET Core 2.1 : 十二.内置日志、使用Nlog将日志输出到文件

    应用离不开日志,虽然现在使用VS有强大的调试功能,开发过程中不复杂的情况懒得输出日志了(想起print和echo的有木有),但在一些复杂的过程中以及应用日常运行中的日志还是非常有用. ASP.NET ...

随机推荐

  1. 开发环境配置(netbeans+ant迁移到eclipse+maven)

    新公司入职,接手一个离职人员的项目,拿到的源码是以一个压缩包,用netbeans开发,ant管理:前端:jsp+extjs,后端:springmvc+hibernate+activiti+spring ...

  2. 给编译好的DLL增加签名

    两个步骤,记录如下,主要用在silverlight中引用的dll要签名时: "C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\ildasm ...

  3. Java线程同步_1

    Java线程同步_1 synchronized 该同步机制的的核心是同步监视器,任何对象都可以作为同步监视器,代码执行结束,或者程序调用了同步监视器的wait方法会导致释放同步监视器 synchron ...

  4. Python开发者最常犯的10个错误

    Python是一门简单易学的编程语言,语法简洁而清晰,并且拥有丰富和强大的类库.与其它大多数程序设计语言使用大括号不一样 ,它使用缩进来定义语句块. 在平时的工作中,Python开发者很容易犯一些小错 ...

  5. 【2013微软面试题】输出节点数为n的二叉树的所有形态

    转自:http://blog.csdn.net/monsterxd/article/details/8449005 /* *  题意,求节点数为n的二叉树的所有形态,先要想个方式来唯一标示一棵二叉树 ...

  6. 2013年19个最棒的HTML5网站模板免费下载

    上次我们整理了14个HTML5奉献给大家下载了,今天我再给大家整理了19个2013最新的HTML5模板供有需要的朋友下载使用,它们涉及不同的行业的模板需求,支持手机设备,十分精美! 1. Affini ...

  7. IOS 异步加载图片

    #import <Foundation/Foundation.h> #import "StringUtils.h" @interface ImageManager : ...

  8. Spark on Yarn遇到的几个问题

    1 概述 Spark的on Yarn模式,其资源分配是交给Yarn的ResourceManager来进行管理的,但是目前的Spark版本,Application日志的查看,只能通过Yarn的yarn ...

  9. 未能加载文件或程序集“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。

    未能加载文件或程序集“Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”或它的某一个 ...

  10. 第三百二十七天 how can I 坚持

    都没心情学习了,睡觉.太失败了.  好了,你赢了,最怕女人不说话了,我妈一生气就不说话,有点怕我妈,你想删就把我删了吧,我不怪你. 给你个善意的建议,任何事情都要有度,过犹而不及,你是属于那种比较听家 ...