当前位置: 首页 > news >正文

日志文件-输出宏的实现

日志文件-输出宏的实现

代码如下:

#include <iostream>
#include <ctime>
//封装一个日志宏,通过日志宏进行日志的打印,在打印信息前带有时间文件名行号
// [22:56:21][log.cpp:12] 打开文件失败!
#define DBG_LEVEL 0
#define INF_LEVEL 1
#define ERR_LEVEL 2
#define DEFAULT_LEVEL DBG_LEVEL
#define LOG(lev_str,level,format,...){\if(level>=DEFAULT_LEVEL){\time_t t=time(nullptr);\struct tm* ptm=localtime(&t);\char time_str[32];\strftime(time_str,31,"%H:%M:%S",ptm);\printf("[%s][%s][%s:%d]\t " format "\n",lev_str,time_str,__FILE__,__LINE__,__VA_ARGS__);\}\
}\#define DLOG(format,...) LOG("DGB",DBG_LEVEL,format,DBG_LEVEL)
#define ILOG(format,...) LOG("INF",INF_LEVEL,format,INF_LEVEL)
#define ELOG(format,...) LOG("ERR",ERR_LEVEL,format,ERR_LEVEL)
int main()
{DLOG("Hello World");ILOG("Hello World");ELOG("Hello World");return 0;
}

运行结果如下:

#include <iostream>
#include <ctime>
//封装一个日志宏,通过日志宏进行日志的打印,在打印信息前带有时间文件名行号
// [22:56:21][log.cpp:12] 打开文件失败!
#define DBG_LEVEL 0
#define INF_LEVEL 1
#define ERR_LEVEL 2
#define DEFAULT_LEVEL DBG_LEVEL
#define LOG(lev_str,level,format,...){\if(level>=DEFAULT_LEVEL){\time_t t=time(nullptr);\struct tm* ptm=localtime(&t);\char time_str[32];\strftime(time_str,31,"%H:%M:%S",ptm);\printf("[%s][%s][%s:%d]\t " format "\n",lev_str,time_str,__FILE__,__LINE__,__VA_ARGS__);\}\
}\#define DLOG(format,...) LOG("DGB",DBG_LEVEL,format,DBG_LEVEL)
#define ILOG(format,...) LOG("INF",INF_LEVEL,format,INF_LEVEL)
#define ELOG(format,...) LOG("ERR",ERR_LEVEL,format,ERR_LEVEL)
int main()
{DLOG("Hello World");ILOG("Hello World");ELOG("Hello World");return 0;
}

文章转载自:

http://SGO8aDRu.dbddm.cn
http://S9i9VjgG.dbddm.cn
http://cgvHSdL8.dbddm.cn
http://hQpZ1Nzs.dbddm.cn
http://YcCxSIRz.dbddm.cn
http://9Zh8WQMO.dbddm.cn
http://cSbFuMkY.dbddm.cn
http://kLaVogOH.dbddm.cn
http://XD6WPcux.dbddm.cn
http://9pilU1r5.dbddm.cn
http://yh3teqnH.dbddm.cn
http://W2P5jatg.dbddm.cn
http://VKrIBsuT.dbddm.cn
http://1fkNF2QY.dbddm.cn
http://5BKVAUTo.dbddm.cn
http://k6EHNeZc.dbddm.cn
http://5ivTBEUh.dbddm.cn
http://MO3anXYa.dbddm.cn
http://9iMqQ1Ig.dbddm.cn
http://KhaFXgqi.dbddm.cn
http://mOKa4cfV.dbddm.cn
http://PohcPOdc.dbddm.cn
http://9apJEC1r.dbddm.cn
http://STD8FDQY.dbddm.cn
http://dzGAb1SN.dbddm.cn
http://gem1w426.dbddm.cn
http://3rh1dGlb.dbddm.cn
http://6Qub7Tfj.dbddm.cn
http://C9Qh53yZ.dbddm.cn
http://IEaNzVek.dbddm.cn
http://www.dtcms.com/a/376304.html

相关文章:

  • AI 帮我写单测:pytest 覆盖率提升 40% 的协作日志
  • RL【7-2】:Temporal-difference Learning
  • 50条常用的MySQL命令汇总
  • 宝塔SSL自动续签
  • Nginx SSL/TLS 配置
  • 剧本杀小程序系统开发:开启沉浸式社交娱乐新纪元
  • Nginx SSL 获取 SSL/TLS 证书(仅用于测试)
  • 激光频率梳 3D 轮廓测量 -- 平晶干涉法观察高精度平面度
  • HTTP快速入门
  • 【Unity UGUI 交互组件——Slider(7)】
  • Vue 3 实战:从零到一用 vue-pdf-embed 打造功能齐全的 PDF 查看器
  • Redis超详细入门教程
  • 单例模式(C++)详解(2)
  • 卷发棒/卷发梳MCU方案分析
  • vue3+TS项目配置unocss
  • 恒拓高科BeeWorks亮相鸿蒙 HEC 生态大会,重构数字化协作免费新体验
  • 抖音矩阵号管理+视频剪辑+智能体开发接入 SaaS源码
  • HarmonyOS 应用开发深度解析:驾驭 ArkTS 声明式 UI 与现代化状态管理
  • HarmonyOS之UIAbilityContext详解
  • HarmonyOS 应用开发深度解析:基于 Stage 模型的 ArkUI 声明式开发实践
  • 数学建模常用算法-模拟退火算法
  • 数据分析之Pandas入门小结
  • Maya绑定:变形器、高级复制、晶格
  • infinityfree 网页连接内网穿透 localtunnel会换 还是用frp成功了
  • 【三维重建】3R-GS:优化相机位姿的3DGS最佳实践
  • 稳态太阳光模拟器 | 多源分布式设计的要点有哪些?
  • 【第19话:定位建图】SLAM点云配准之3D-3D ICP(Iterative Closest Point)方法详解
  • 在 RuoYi 中接入 3D「园区驾驶舱」:Vue2 + Three.js + Nginx
  • tp5的tbmember表闭包查询 openid=‘abc‘ 并且(wx_unionid=null或者wx_unionid=‘‘)
  • PPT转化成PDF脚本