首页 > 编程语言 >为程序添加日志

为程序添加日志

时间:2023-04-28 14:23:23浏览次数:35  
标签:__ unLen 程序 test 添加 DEBUG 日志 szBuf define

这里,介绍一个头文件,客制化了日志,方便我们调试。

在编写程序的时候,添加上这个头文件,就可以了。代码如下:

log.h:

#ifndef _LOG_H_
#define _LOG_H_
#include<stdio.h>

#define DEBUG_EN (1u)
 
#if (DEBUG_EN)
 
#define DEBUG_MAX_SIZE 512
unsigned char szBuf[DEBUG_MAX_SIZE];
 
#define DEBUG_INFO( format, ... ) do{\
    unsigned short unLen = 0;\
    unLen += snprintf(szBuf+unLen,DEBUG_MAX_SIZE, "[INFO][%s][@%s][#%d]:",__FILE__,__FUNCTION__,__LINE__);\
    unLen += snprintf(szBuf+unLen,DEBUG_MAX_SIZE-unLen, format, ## __VA_ARGS__ );\
    printf("%s",szBuf);\
}while(0)
 
#define DEBUG_WARN( format, ... ) do{\
    unsigned short unLen = 0;\
    unLen += snprintf(szBuf+unLen,DEBUG_MAX_SIZE, "[WARN][%s][@%s][#%d]:",__FILE__,__FUNCTION__,__LINE__);\
    unLen += snprintf(szBuf+unLen,DEBUG_MAX_SIZE-unLen, format, ## __VA_ARGS__ );\
    printf("%s",szBuf);\
}while(0)
 
#define DEBUG_ERR( format, ... ) do{\
    unsigned short unLen = 0;\
    unLen += snprintf(szBuf+unLen,DEBUG_MAX_SIZE, "[ERR][%s][@%s][#%d]:",__FILE__,__FUNCTION__,__LINE__);\
    unLen += snprintf(szBuf+unLen,DEBUG_MAX_SIZE-unLen, format, ## __VA_ARGS__ );\
    printf("%s",szBuf);\
}while(0)
 
#else
 
#define DEBUG_INFO(...)
#define DEBUG_WARN(...)
#define DEBUG_ERR(...)
 
#endif //DEBUG_EN
#endif //_LOG_H_

使用:main.c

#include<stdio.h>
#include"log.h"

int main(){

    int a = 2;

    printf("this is a test %d\n",a);

    DEBUG_INFO("this is a test %d\n",a);
    DEBUG_WARN("this is a test %d\n",a);
    DEBUG_ERR("this is a test %d\n",a);
    return 0;
}

编译:gcc  -o   test  main.c

结果:

this is a test 2
[INFO][main.c][@main][#10]:this is a test 2
[WARN][main.c][@main][#11]:this is a test 2
[ERR][main.c][@main][#12]:this is a test 2

如果,我们不需要日志,可以将   #define DEBUG_EN (1u) 注释即可。

标签:__,unLen,程序,test,添加,DEBUG,日志,szBuf,define
From: https://www.cnblogs.com/haoran123/p/17361988.html

相关文章

  • 写代码犹如写文章: “大师级程序员把系统当故事来讲,而不是当做程序来写” | 如何架构
    “大师级程序员把系统当故事来讲,而不是当做程序来写”写代码犹如写文章好的代码应该如好文章一样表达思想,被人读懂。中心思想:突出明确程序是开发者用编程语言写成的一本书,首先应该是记录开发者对业务需求分析、系统分析,最终用软件实现所思所想的知识的记录与传承。然后再是完成程......
  • 【图文详解】一文全面彻底搞懂HBase、LevelDB、RocksDB等NoSQL背后的存储原理:LSM-tree
    LSM树广泛用于数据存储,例如RocksDB、ApacheAsterixDB、Bigtable、HBase、LevelDB、ApacheAccumulo、SQLite4、Tarantool、WiredTiger、ApacheCassandra、InfluxDB和ScyllaDB等。在这篇文章中,我们将深入探讨LogStructuredMergeTree,又名LSM树:许多高度可扩展的NoSQL分......
  • pytest---增加log日志(pytest.ini)
    前言在自动化操作过程中,我们可以通过增加log日志的情况进行更加直观的了解我们测试用例的执行情况,包括执行状态,方便排查问题和分析问题,前面有简单介绍pytest.ini这个文件,他可以帮助我们更加方便的执行测试用例,pytest.ini中有单独为log日志增加的一些信息log_clilog_cli:表示在执......
  • esp32 墨水屏 html 上位机程序 传图
    使用esp32开发墨水屏显示图片这里的墨水屏工具为我自己制作的,使用esp32c3和2.9寸墨水屏,你如果使用的是自己的,请更换墨水屏驱动代码,引脚定义和图片尺寸在之前的demo演示中,我展示了使用esp32c3配合墨水屏展示HelloWorld!的一个程序。有朋友问我,墨水屏可以展示图片......
  • 使用 ChatGPT ,通过自然语言编写 eBPF 程序和追踪 Linux 系统
    eBPF是一项革命性的技术,起源于Linux内核,可以在操作系统的内核中运行沙盒程序。它被用来安全和有效地扩展内核的功能,而不需要改变内核的源代码或加载内核模块。今天,eBPF被广泛用于各类场景:在现代数据中心和云原生环境中,可以提供高性能的网络包处理和负载均衡;以非常低的资源开销,做......
  • 用描述程序的方式emo,扎心了...
    用描述程序的方式emo,扎心了...众所周知写程序是个枯燥无聊的过程,再加上生活的不顺与坎坷,当程序语言与emo结合起来,看谁还说程序员不懂感情!首当其冲的就是循环语句了世界上最寂寞的感觉,是我在for循环里等待你的return,但你却一直在while循环里追寻自己的快乐然后就是借助......
  • TNS-12541: TNS: 无监听程序 TNS-12560: TNS: 协议适配器错误
    MicrosoftWindows[版本6.1.7601]版权所有(c)2009MicrosoftCorporation。保留所有权利。C:\Users\Administrator>lsnrctlLSNRCTLfor64-bitWindows:Version11.2.0.1.0-Productionon28-4月-202311:29:22Copyright(c)1991,2010,Oracle.Allrightsreserved......
  • java jar 没有主清单属性_Spring Boot jar中没有主清单属性的解决方法「建议收藏」
    javajar没有主清单属性_SpringBootjar中没有主清单属性的解决方法「建议收藏」原文链接:https://cloud.tencent.com/developer/article/2133065大家好,又见面了,我是你们的朋友全栈君。使用SpringBoot微服务搭建框架,在eclipse和Idea下能正常运行,但是在打成jar包部署或者直接......
  • Vue3+typescript如何给元素添加一个Ctrl+s的事件,用于保存文件?
    如下代码,建议用这个,e.keyCode已经过时,后面都是用e.key:string.onMounted(()=>{window.addEventListener('keydown',(e)=>{if(e.ctrlKey&&e.key==='s'){//检查是否按下了Ctrl+Se.preventDefault();//阻止默认行为(保存网页)con......
  • linux下利用nohup后台运行jar文件包程序
    Linux运行jar包命令如下:方式一: 1.java-jarXXX.jar特点:当前ssh窗口被锁定,可按CTRL+C打断程序运行,或直接关闭窗口,程序退出那如何让窗口不锁定?方式二 1.java-jarXXX.jar&&代表在后台运行。特定:当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。继续改......