一个小巧的C++Log输出到文件类 (转)
来源:互联网 发布:mac terminal 清屏 编辑:程序博客网 时间:2024/06/05 08:06
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。
- #include "Log.h"
- BOOL
- int float BOOL enum )
- return
- 效果:
分类: Bug调试, C/C++
0 0
- 一个小巧的C++Log输出到文件类
- 一个小巧的C++Log输出到文件类 (转)
- c 将log输出到文件
- 【Log】一个功能强大的Log封装库包括控制日志输出,保存Log到文件,过滤输出等级。。
- 一个小巧的列出文件夹下的文件类
- 把程序的输出结果输出到log文件
- PHP输出log到文件!!!
- log信息输出到文件
- MFC输出Log信息到log文件
- 一个将调试信息输出到控制台的Log函数
- Log(C/C++和Java)->写到Log设备文件 LogCat->读取Log设备文件(LogCat默认输出控制台)
- Android Log 输出到文件中去的简易方法
- playframework中将log输出到文件里的配置方法
- log4j不同业务逻辑输出到不同的log文件
- log日志:简单的log日志输出(C++)
- 某个类输出日志到某个log文件配置
- WinCE LOG 输出到文件(串口)控制
- PHP一个小巧的缓存类
- scikit-learn:0.5. Choosing the right estimator(你的问题适合什么estimator来建模呢)
- 求最长有效括号长度 java
- XMPP协议及其扩展详解
- python处理excel的第三方库
- SQLite剖析(6):临时文件和内存数据库
- 一个小巧的C++Log输出到文件类 (转)
- scikit-learn:0. user_guide——需要学习的所有内容
- [华为机试练习题]24.删除链表中的重复节点、剩余节点逆序输出
- 桶排序
- 最近很火!一名移动互联网员工写给老婆的信
- 学习html(2)
- Cirros linux 相关问题
- hdu前M大的数
- 获取ViewPager当前展示的Fragment