一个小巧的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 ...
随机推荐
- NSRangeFromString 测试
官网文档 Returns a range from a textual representation. Declaration SWIFT func NSRangeFromString(_ aStri ...
- HDU-3874 Necklace 线段树+离线
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3874 比较简单的题,题意也好懂. 先O(n)求每个数左边第一次出现的与他相同的数的位置l[i].对询问 ...
- 省时的浏览器同步测试工具 browsersync NodeJS
http://www.browsersync.cn/ 省时的浏览器同步测试工具 Browsersync能让浏览器实时.快速响应您的文件更改(html.js.css.sass.less等)并自动刷新页面 ...
- 检查 CPU 是否支持二级地址转换 - 摘自网络
Windows 8 Consumer Preview 于2月正式发布,随后 Windows Server 8 Beta 也公布了下载.整体对比,Windows 8 在硬件方面的要求并不高,其最低硬件需 ...
- mysql基础知识(3)--创建
创建表: 基本形式 create table [if not exists] 表名(字段列表, [约束或索引列表]) [表选项列表]; 说明:列表都是表示“多个”,相互之间用逗号分开. 字段基本 ...
- mysql系统表加trigger和对特定的库禁用 DDL 语句
给 mysql 系统表加上 trigger 1 Reply 默认情况下,mysql 是不能给系统表,例如 mysql.user 加上触发器的.会提示 ERROR 1465 (HY000): Trigg ...
- ArcGIS Desktop10.2与CityEngine2012兼容问题
要培训ArcGIS Desktop和Esri CityEngine2012.在一台机器上装好Desktop10.2之后,在注册Esri CityEngine2012时报出了"7019:Inv ...
- UVALive 5881 Unique Encryption Keys (DP)
Unique Encryption Keys 题目链接: http://acm.hust.edu.cn/vjudge/problem/26633 Description http://7xjob4.c ...
- POJ 3347 Kadj Squares
Kadj Squares Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 2132 Accepted: 843 Descr ...
- 存量数据处理结果查询.txt
请求报文:<?xml version="1.0" encoding="UTF-8"?><PDL><PDL-Head>< ...