一个小巧的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。
- #include "Log.h"
- BOOL
- int
float
BOOL
enum)
- return
- 效果:
一个小巧的C++Log输出到文件类 (转)的更多相关文章
- 重构qDebug()<<,使log输出到文件
重构qDebug()<<,使log输出到文件 #include <QProcessEnvironment> #include <QDateTime> #includ ...
- 【记录】尝试用android-logging-log4j去实现log输出内容到sd卡中的文件的功能
[背景] 折腾: [记录]给Android中添加log日志输出到文件 期间,已经试了: [记录]尝试用android中microlog4android实现log输出到文件的功能 但是不好用. 然后就是 ...
- ios 将Log日志重定向输出到文件中保存
对于真机,日志没法保存,不好分析问题.所以有必要将日志保存到应用的Docunment目录下,并设置成共享文件,这样才能取出分析. 首先是日志输出,分为c的printf和标准的NSLog输出,print ...
- MY_Log,无缝替换原生Log,支持日志输出到文件、FirePHP
自己扩展了一个MY_Log, 用法类似于log4j,目前支持将日志输出到文件.FirePHP.如果你需要将日志输出到其他地方,比如邮件.数据库等,可以很方便地进行扩展. 用法很简单,大家一看就知道.1 ...
- loadrunner脚本中写入脚本输出log到外部文件,分析参数取值方式
loadrunner脚本中写入脚本输出log到外部文件,分析参数取值方式 分类: 心得 loadrunner 我的测试 2012-04-01 12:52 2340人阅读 评论(0) 收藏 举报 脚本l ...
- loadrunner脚本中参数化和返回值输出log到外部文件
loadrunner脚本中参数化和返回值输出log到外部文件 很多时候,我们在做性能测试之前,需要造数据,但是使用的这些参数化数据和生成的返回数据在后面的测试都会用的,所以我们需要在造数据过程中,将参 ...
- android:分享 一个很强大的LOG开关---Log.isLoggable
标签:android分享 一个很强大的log开 1.API亮点: 此API可以实现不更换APK,在出问题的手机上就直接能抓到有效log,能提升不少工作效率. 2.API介绍 最近在解决短信问题时,看到 ...
- Node.js系列文章:利用console输出日志文件
通常我们在写Node.js程序时,都习惯使用console.log打印日志信息,但这也仅限于控制台输出,有时候我们需要将信息输出到日志文件中,实际上利用console也可以达到这个目的的,今天就来简单 ...
- ASP.NET Core 2.1 : 十二.内置日志、使用Nlog将日志输出到文件
应用离不开日志,虽然现在使用VS有强大的调试功能,开发过程中不复杂的情况懒得输出日志了(想起print和echo的有木有),但在一些复杂的过程中以及应用日常运行中的日志还是非常有用. ASP.NET ...
随机推荐
- stitch image app (Qt)
result how to use? source code http://7qnct6.com1.z0.glb.clouddn.com/dropSelect.rar
- iOS学习笔记之回调(二)
写在前面 上一篇学习笔记中简单介绍了通过目标-动作对实现回调操作:创建两个对象timer和logger,将logger设置为timer的目标,timer定时调用logger的sayOuch函数.在这个 ...
- MySQL中批量插入数据
不管怎么样, 你需要大量的数据, 那么问题来了, 怎么快速地插入呢? 1. 这是我创建的一个批量插入的存储过程… 当然, 你可以把参数去掉, 一次性插入1W, 10W… CREATE DEFINER= ...
- javascript --- jQuery --- Deferred对象
javascript --- jQuery --- Deferred对象 javascript的函数式编程是多么引人入胜,jQuery使代码尽可能的精简,intelligent! defer - 必应 ...
- C#面向对象基础01
面向对象不是取代面向过程的类.对象."人"是类,"张三"是人这个类的对象.类是抽象的,对象是具体的.按钮就是类,某个按钮就是对象.对象可以叫做类的实例.类就像i ...
- 两个队列+k叉哈夫曼树 HDU 5884
// 两个队列+k叉哈夫曼树 HDU 5884 // camp题解: // 题意:nn个有序序列的归并排序.每次可以选择不超过kk个序列进行合并,合并代价为这些序列的长度和.总的合并代价不能超过TT, ...
- 初识 istringstream、ostringstream、stringstream 运用
今天编程练习时遇到了istringstream的用法,感觉很实用.后面附题目! C++的输入输出分为三种: (1)基于控制台的I/O (2)基于文件的I/O (3)基于字符串的I/O 1.头文件 # ...
- Git 提交后开始自动构建
设定Git仓库的钩子 一般路径为 xxx.git/hooks 参考文档 https://git-scm.com/docs/githooks 修改 post-receive #!/bin/bash wh ...
- Cocos手游录制插件:cocos-plugin
Cocos手游录制插件:cocos-plugin Testinlab2014-10-29 13:42:27153 次阅读 Cocos手游录制插件,用于添加Testin手游自动化测试支持,支持cocos ...
- c#动态加载dll文件
1.在写一个记录日志到文件中的类库(生成dll文件copy到一个目录中去,然后在主函数的appconfig中去配置. using System; using System.Collections.Ge ...