一个小巧的C++Log输出到文件类
一个小巧的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。
- #include "Log.h"
- BOOL
- int float BOOL enum )
- return
- 效果:
一个小巧的C++Log输出到文件类相关推荐
- java log输出到文件路径_log4j中日志输出文件指定相对路径的方法
log4j中日志输出文件指定相对路径的方法 1.设置在 C:/log/error.log log4j.appender.E = org.apache.log4j.RollingFileAppender ...
- java log输出到文件路径_Java - 配置log4j的日志文件路径 (附-获取当前类路径的多种方法)...
1 日志路径带来的痛点 Java 项目中少不了要和log4j等日志框架打交道, 开发环境和生产环境下日志文件的输出路径总是不一致, 设置为绝对路径的方式缺少了灵活性, 每次变更项目路径都要修改文件, ...
- 【单片机笔记】如何编写一个清晰的串口日志输出DEBUG文件(附源码)
前言: 相信大多数嵌入式开发者都会碰到对程序进行调试或者查找BUG的情况,常见的两种方法都是仿真和通过日志进行的.有条件仿真的是更好,单是在编写嵌入式软件程序过程中,并不是所有的硬件都支持仿真或者方便 ...
- swift LOG 输出
Log 输出是程序开发中很重要的组成部分,虽然它并不是直接的业务代码,但是却可以忠实地反映我们的程序是如何工作的,以及记录程序运行的过程中发生了什么. 在 Swift 中,最简单的输出方法就是使用 p ...
- 基于spdlog实现日志控制台输出、文件输出或控制台+文件同时输出
基于spdlog封装了一套接口,可实现控制台log输出.文件log输出,或控制台+文件同时输出,根据自己需求自由切换.亲测OK,分享一下. 头文件定义基类HrgLogger和三个子类ConsoleLo ...
- MY_Log,无缝替换原生Log,支持日志输出到文件、FirePHP
自己扩展了一个MY_Log, 用法类似于log4j,目前支持将日志输出到文件.FirePHP. 如果你需要将日志输出到其他地方,比如邮件.数据库等,可以很方便地进行扩展. 用法很简单,大家一看就知道. ...
- log日志输出到文件:
log日志输出到文件: 输出到不同的文件夹:(需要配置xml文件) <?xml version="1.0" encoding="UTF-8"?> & ...
- 【Python】规范脚本Log输出,将log输出到控制台同时写入文件中
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.logging模块的引入 二.logging模块的使用 1.引入库 2.创建一个logger对象 3.将日志写入文 ...
- linux c打印日志文件,linux c下log输出代码模板示例代码
前言 本文主要介绍了关于linux c下log输出代码模板的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 模板 模本分为两个文件:log.c和log.h. log.c /* ...
最新文章
- 广播风暴系列专题(一)广播风暴:发现-端口
- mysql 除去列名打印_sql – 使用beeline时避免在列名中打印表名
- idea+JRebel实现项目热部署
- require.js用法简介
- emlog过滤html,Emlog 搜索优化 标题 + 全文搜索
- Android逆向笔记-使用Android Studio调试Smali代码(方式二)
- 信息学奥赛一本通 1942:【08NOIP普及组】ISBN号码 | OpenJudge NOI 1.7 29:ISBN号码 | 洛谷 P1055 [NOIP2008 普及组] ISBN 号码
- 蓝桥杯2020年第十一届Python省赛第五题-排序
- 未能写入输出文件拒绝访问
- 用AngularJS开发下一代Web应用pdf
- android 三星截长屏,三星如何截屏手机长图,三星四种截图方法介绍
- SWOT个人分析模板
- 每天做好一件事,坦然微笑地面对生活
- 快速排序(填坑与交换)
- 采集利器 - Web Scraper教学及示例
- java实现pdf旋转_java-Apache PDFBox旋转PDImageXObject
- 33岁跳槽无路,走投无路之际受贵人指点,成功上岸阿里(Java岗)
- 虹科喜报 | 虹科技术工程师【国内首批】拿下Redis认证开发者证书!
- 【日常学习】【数学】codevs3625 士兵站队问题题解
- 压力传感器电阻应变片的发展
热门文章
- Java模拟售票窗口代码_java多线程模拟售票,多个窗口售票
- 2022-01-26:最优账单平衡。 一群朋友在度假期间会相互借钱。比如说,小爱同学支付了小新同学的午餐共计 10 美元。如果小明同学支付了小爱同学的出租车钱共计 5 美元。我们可以用一个三元组 (x
- 《流浪地球》票房:预测10亿却飚50亿 ,大数据预测为什么这么难...
- 【python爬虫】js逆向:空气质量在线平台,解决反调试,加密
- UI设计师就业发展前景如何?
- 华为分析丨汽车行业报告上线,赋能车企业绩增长
- 安装软件时出现“error creating process错误”
- CocosCreator之Animation动画组件
- python做工控机_[Micropython]TPYBoard v202 利用单片机快速实现家庭智能控制平台
- references to other resources are not supported by build-time PNG generation.