前言:

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++ 打印日志信息相关推荐

  1. Android逆向笔记-Proguard混淆Android代码以及去打印日志信息

    本笔记只记录其现象和功能,不记录具体怎么去用他. 这个Proguard全称应该是project guard,用来混淆Android代码的.如下未使用Proguard的类: 使用Proguard后: 这 ...

  2. springboot使用AOP打印日志信息

    上一篇介绍了springboot整合Mybatis例子,这一篇在上一篇的基础上,简单修改部分实现日志信息的打印. 随着项目功能的一点点增加,打印日志信息就非常必要了,可以帮助我们很快确定哪里出现了问题 ...

  3. springboot启动不打印日志信息_SpringBoot启动信息没有打印到日志文件中,怎么回事?...

    我的一个SpringCloud工程下一个SpringBoot程序,logback配置文件如下,在IDEA中,dev环境下启动的日志会打印在IDEA下的窗口中,但是配置了logback,要在测试机上pr ...

  4. hive 取消打印日志信息_Hive及其相关大数据组件

    HDFS架构 Hadoop 分布式文件系统(HDFS)是 Hive 存储数据的地方,简单了解HDFS的基本机制和读写工作机制,对于排查HiveSQL 程序是否由于数据存储引发的性能问题有较大的帮助. ...

  5. Unity 彩色打印日志信息

    /**FileName: MT_Debug.cs*Author: MinTao*Date: 2021/12/21 11:56:18*UnityVersion: 2020.3.0f1c1*Descrip ...

  6. 关于eclipse控制台出不来,无法打印日志信息解决办法

    一.解决控制台出不来的三种方法,前两种是常规方法一.选择Window(窗口) --->show view(显示视图) --->Other(另外) 搜索Console(控制台)然后选中--- ...

  7. springboot启动不打印日志信息_springboot项目大量打印debug日志问题

    目前,java下应用最广泛的日志系统主要就是两个系列: log4j和slf4j+logback . 其中,slf4j只包含日志的接口,logback只包括日志的具体实现,两者加起来才是一个完整的日志系 ...

  8. springboot启动不打印日志信息_SpringBoot日志操作【全局异常捕获消息处理--日志控制台输出+日志文件记录】...

    引言 看到一篇blog,感觉写的角度非常好,因此引用过来消化一番.

  9. muduo网络库学习(九)日志类Logger和LogStream,将日志信息打印到屏幕

    每一个成熟的项目都有大大小小的日志系统,在关键的地方打印日志信息,常用来跟踪程序运行,查找错误原因等,可以节省大量的debug时间 muduo的日志信息有5个级别 TRACE,细粒度最高的日志信息,打 ...

  10. linux c打印日志文件,linux c下log输出代码模板示例代码

    前言 本文主要介绍了关于linux c下log输出代码模板的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 模板 模本分为两个文件:log.c和log.h. log.c /* ...

最新文章

  1. 无法解决 equal to 操作中 Chinese_PRC_CI_AS_WS 和 Chinese_PRC_CI_AS 之间的排序规则冲突...
  2. ucos内存管理笔记
  3. 2020 MCM Meritorious Winner
  4. 【转】linux tar.gz zip 解压缩 压缩命令
  5. Nginx 作为 WebSockets 代理
  6. 02-合并frame
  7. Xcode11 后Appdelegate自定义UIWindow对象失败详解。
  8. java setlayout_Java Button.setLayoutX方法代码示例
  9. var和function谁先优先执行_JS中如何和让异步函数优先执行?
  10. php url路径问题和php文件以绝对路径引入
  11. 在 Mac 上的 Keynote 中如何先排版再选照片?
  12. Manjaro Gnome 安装TIM
  13. MAC 安装oracle instantclient
  14. 照片格式怎么快速转JPG或JPEG格式
  15. 一份王者荣耀的英雄数据报告
  16. mac os修改默认的Python解释器版本
  17. 【原创】破解无线路由密码的那些事儿
  18. 浏览器插件 - Chrome 对 UserScript 的声明头(metadata)兼容性一览
  19. java+springboot学校小卖部超市收银系统maven
  20. AFX_MODULE_STATE作用

热门文章

  1. Oracle刷建表语句
  2. 八、Android性能优化之电量优化(二)
  3. linux内核之字符设备驱动图解
  4. python 序列化之JSON和pickle详解
  5. Linux上的查找命令之locate查找
  6. 【转】如何删除一个repository(仓库)
  7. oracle 定时器调用存储过程
  8. spring 从源码学设计1-doDispatch()
  9. 全网、全国最好用的基于经纬度的天气查询、天气预报接口
  10. 组成原理说明------地址对齐