c++ 打印日志信息
前言:
C/C++提供了四个宏__FUNCTION__ ,__TIME__ ,__LINE__ ,__FILE__定位程序运行时的错误。程序预编译时预编译器将用所在的函数名,文件名和行号替换。当运行时错误产生后这三个宏分别能返回错误所在的函数,所在的文件名和所在的行号。
_FUNCTION__ :函数名
__TIME__ :文件运行的时间 (显示编译的时间)
__LINE__ :所在行数
__FILE__:文件的名字
如
#include <stdio.h>
int main(int, char**)
{
char str3[256] = { 0 };
sprintf_s(str3, "This fake error is on %s in %s in func %s on line %d.", __TIME__, __FILE__, __FUNCTION__, __LINE__);
printf("%s", str3);
PrintLog(str3);
return 0;
}
This fake error is on 14:30:56 in f:\test\stdtest\test\test.cpp in func main on line 18.
printf 和sprintf 见:CSDNhttps://mp.csdn.net/mp_blog/creation/editor/121746323
1.日志打印函数,在日志里添加上C++的编译宏,如上面的4个宏
void PrintLog(string str)
{
SYSTEMTIME sys;
::GetLocalTime(&sys);
std::ofstream ofs;
ofs.open("driver.log", std::ios_base::in | std::ios_base::app);
ofs << "[" << sys.wHour << ":" << sys.wMinute << ":" << sys.wSecond << "." << sys.wMilliseconds << "]\t" << str << std::endl;
ofs.close();
}
2.日志管理
对于日志文件,一般有两种处理方式,一种就是每次启动软件,清空之前的文件;另一种就是累增。前一种的缺点是,长跑测试中,软件崩溃,后来者不小心重启了软件,导致历史日志丢失;后一种的缺陷是,长跑测试,日志文件累增过大,导致磁盘空间不足。
针对上面两种情况的优缺点,我设计了一种循环记录的方法,类似“行车记录仪”。
bool CreateLogFile()
{
long fileSize = 0;
HANDLE handle = CreateFile(L"driver.log", FILE_READ_EA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
if (handle != INVALID_HANDLE_VALUE)
{
fileSize = GetFileSize(handle, NULL);
cout << fileSize << endl;
CloseHandle(handle);
}
if (fileSize < 200 * 1024 * 1024) // filesize的单位是byte,设定门限是200M
{
PrintLog("---reboot----");
}
else
DeleteFile(L"driver.log");
return true;
}
c++ 打印日志信息相关推荐
- Android逆向笔记-Proguard混淆Android代码以及去打印日志信息
本笔记只记录其现象和功能,不记录具体怎么去用他. 这个Proguard全称应该是project guard,用来混淆Android代码的.如下未使用Proguard的类: 使用Proguard后: 这 ...
- springboot使用AOP打印日志信息
上一篇介绍了springboot整合Mybatis例子,这一篇在上一篇的基础上,简单修改部分实现日志信息的打印. 随着项目功能的一点点增加,打印日志信息就非常必要了,可以帮助我们很快确定哪里出现了问题 ...
- springboot启动不打印日志信息_SpringBoot启动信息没有打印到日志文件中,怎么回事?...
我的一个SpringCloud工程下一个SpringBoot程序,logback配置文件如下,在IDEA中,dev环境下启动的日志会打印在IDEA下的窗口中,但是配置了logback,要在测试机上pr ...
- hive 取消打印日志信息_Hive及其相关大数据组件
HDFS架构 Hadoop 分布式文件系统(HDFS)是 Hive 存储数据的地方,简单了解HDFS的基本机制和读写工作机制,对于排查HiveSQL 程序是否由于数据存储引发的性能问题有较大的帮助. ...
- Unity 彩色打印日志信息
/**FileName: MT_Debug.cs*Author: MinTao*Date: 2021/12/21 11:56:18*UnityVersion: 2020.3.0f1c1*Descrip ...
- 关于eclipse控制台出不来,无法打印日志信息解决办法
一.解决控制台出不来的三种方法,前两种是常规方法一.选择Window(窗口) --->show view(显示视图) --->Other(另外) 搜索Console(控制台)然后选中--- ...
- springboot启动不打印日志信息_springboot项目大量打印debug日志问题
目前,java下应用最广泛的日志系统主要就是两个系列: log4j和slf4j+logback . 其中,slf4j只包含日志的接口,logback只包括日志的具体实现,两者加起来才是一个完整的日志系 ...
- springboot启动不打印日志信息_SpringBoot日志操作【全局异常捕获消息处理--日志控制台输出+日志文件记录】...
引言 看到一篇blog,感觉写的角度非常好,因此引用过来消化一番.
- muduo网络库学习(九)日志类Logger和LogStream,将日志信息打印到屏幕
每一个成熟的项目都有大大小小的日志系统,在关键的地方打印日志信息,常用来跟踪程序运行,查找错误原因等,可以节省大量的debug时间 muduo的日志信息有5个级别 TRACE,细粒度最高的日志信息,打 ...
- linux c打印日志文件,linux c下log输出代码模板示例代码
前言 本文主要介绍了关于linux c下log输出代码模板的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 模板 模本分为两个文件:log.c和log.h. log.c /* ...
最新文章
- 无法解决 equal to 操作中 Chinese_PRC_CI_AS_WS 和 Chinese_PRC_CI_AS 之间的排序规则冲突...
- ucos内存管理笔记
- 2020 MCM Meritorious Winner
- 【转】linux tar.gz zip 解压缩 压缩命令
- Nginx 作为 WebSockets 代理
- 02-合并frame
- Xcode11 后Appdelegate自定义UIWindow对象失败详解。
- java setlayout_Java Button.setLayoutX方法代码示例
- var和function谁先优先执行_JS中如何和让异步函数优先执行?
- php url路径问题和php文件以绝对路径引入
- 在 Mac 上的 Keynote 中如何先排版再选照片?
- Manjaro Gnome 安装TIM
- MAC 安装oracle instantclient
- 照片格式怎么快速转JPG或JPEG格式
- 一份王者荣耀的英雄数据报告
- mac os修改默认的Python解释器版本
- 【原创】破解无线路由密码的那些事儿
- 浏览器插件 - Chrome 对 UserScript 的声明头(metadata)兼容性一览
- java+springboot学校小卖部超市收银系统maven
- AFX_MODULE_STATE作用