总结几种log打印printf函数的宏定义

总结几种log打印printf函数的宏定义

分类: C语言--永远的学习 2009-09-15 22:16 1767人阅读 评论(0) 收藏 举报

http://blog.chinaunix.net/u1/38994/showart_1168773.html

[c-sharp] view plaincopy?

#include

#define lU_DEBUG_PREFIX "##########"

#define LU_DEBUG_CMD 0x01

#define LU_DEBUG_DATA 0x02

#define LU_DEBUG_ERROR 0x04

#define LU_PRINTF_cmd(msg...) do{if(lu_debugs & LU_DEBUG_CMD)printf(lU_DEBUG_PREFIX msg);}while(0)

#define LU_PRINTF_data(msg...) do{if(lu_debugs & LU_DEBUG_DATA)printf(lU_DEBUG_PREFIX msg);}while(0)

#define LU_PRINTF_error(msg...) do{if(lu_debugs & LU_DEBUG_ERROR)printf(lU_DEBUG_PREFIX msg);}while(0)

#define lu_printf(level, msg...) LU_PRINTF_##level(msg)

#define lu_printf2(...) printf(__VA_ARGS__)

#define lu_printf3(...) lu_printf(__VA_ARGS__)

static int lu_printf4_format(int prio, const char *fmt, ...);

#define lu_printf4(prio, fmt...) lu_printf4_format(prio, fmt)

int lu_debugs;

int main(int argc, char *argv[])

{

lu_debugs |= LU_DEBUG_CMD | LU_DEBUG_DATA | LU_DEBUG_ERROR;

printf("lu_debugs = %p\n", lu_debugs);

lu_printf(cmd,"this is cmd\n");

lu_printf(data,"this is data\n");

lu_printf(error,"this is error\n");

lu_debugs &= ~(LU_DEBUG_CMD | LU_DEBUG_DATA);

printf("lu_debugs = %p\n", lu_debugs);

lu_printf(cmd,"this is cmd\n");

lu_printf(data,"this is data\n");

lu_printf(error,"this is error\n");

lu_printf2("aa%d,%s,%dbbbbb\n", 20, "eeeeeee", 100);

lu_debugs |= LU_DEBUG_CMD | LU_DEBUG_DATA | LU_DEBUG_ERROR;

printf("lu_debugs = %p\n", lu_debugs);

lu_printf3(cmd,"this is cmd \n");

lu_printf3(data,"this is data\n");

lu_printf3(error,"this is error\n");

lu_printf4(0,"luther %s ,%d ,%d\n", "gliethttp", 1, 2);

return 0;

}

#include

static int lu_printf4_format(int prio, const char *fmt, ...)

{

#define LOG_BUF_SIZE (4096)

va_list ap;

char buf[LOG_BUF_SIZE];

va_start(ap, fmt);

vsnprintf(buf, LOG_BUF_SIZE, fmt, ap);

va_end(ap);

printf(": %s", prio, buf);

printf("------------------------\n");

printf(buf);

}

#define ENTER() LOGD("enter into %s", __FUNCTION__)

#define LOGD(...) ((void)LOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__))

#define LOG(priority, tag, ...) \

LOG_PRI(ANDROID_##priority, tag, __VA_ARGS__)

#define LOG_PRI(priority, tag, ...) \

android_printLog(priority, tag, __VA_ARGS__)

#define android_printLog(prio, tag, fmt...) \

__android_log_print(prio, tag, fmt)

http://www.linuxsir.org/bbs/showthread.php?t=302451

这里有篇不错的文章,[经验分享]程序日志中自动记录所在函数名、文件名、行号

比上面的要好多了:

[c-sharp] view plaincopy?

#include

#define LOG_DEBUG "DEBUG"

#define LOG_TRACE "TRACE"

#define LOG_ERROR "ERROR"

#define LOG_INFO  "INFOR"

#define LOG_CRIT  "CRTCL"

#define LOG(level, format, ...) \

do { \

fprintf(stderr, "[%s|%s@%s,%d] " format "\n", \

level, __func__, __FILE__, __LINE__, ##__VA_ARGS__ ); \

} while (0)

int main()

{

LOG(LOG_DEBUG, "a=%d", 10);

return 0;

}

或者

[c-sharp] view plaincopy?

#define DBG(format, args...) fprintf(stderr, "[%s|%s@%s,%d] " format "\n", APP_NAME, __FUNCTION__, __FILE__, __LINE__, ## args );

总结几种log打印printf函数的宏定义

分类: C语言--永远的学习 2009-09-15 22:16 1767人阅读 评论(0) 收藏 举报

http://blog.chinaunix.net/u1/38994/showart_1168773.html

[c-sharp] view plaincopy?

#include

#define lU_DEBUG_PREFIX "##########"

#define LU_DEBUG_CMD 0x01

#define LU_DEBUG_DATA 0x02

#define LU_DEBUG_ERROR 0x04

#define LU_PRINTF_cmd(msg...) do{if(lu_debugs & LU_DEBUG_CMD)printf(lU_DEBUG_PREFIX msg);}while(0)

#define LU_PRINTF_data(msg...) do{if(lu_debugs & LU_DEBUG_DATA)printf(lU_DEBUG_PREFIX msg);}while(0)

#define LU_PRINTF_error(msg...) do{if(lu_debugs & LU_DEBUG_ERROR)printf(lU_DEBUG_PREFIX msg);}while(0)

#define lu_printf(level, msg...) LU_PRINTF_##level(msg)

#define lu_printf2(...) printf(__VA_ARGS__)

#define lu_printf3(...) lu_printf(__VA_ARGS__)

static int lu_printf4_format(int prio, const char *fmt, ...);

#define lu_printf4(prio, fmt...) lu_printf4_format(prio, fmt)

int lu_debugs;

int main(int argc, char *argv[])

{

lu_debugs |= LU_DEBUG_CMD | LU_DEBUG_DATA | LU_DEBUG_ERROR;

printf("lu_debugs = %p\n", lu_debugs);

lu_printf(cmd,"this is cmd\n");

lu_printf(data,"this is data\n");

lu_printf(error,"this is error\n");

lu_debugs &= ~(LU_DEBUG_CMD | LU_DEBUG_DATA);

printf("lu_debugs = %p\n", lu_debugs);

lu_printf(cmd,"this is cmd\n");

lu_printf(data,"this is data\n");

lu_printf(error,"this is error\n");

lu_printf2("aa%d,%s,%dbbbbb\n", 20, "eeeeeee", 100);

lu_debugs |= LU_DEBUG_CMD | LU_DEBUG_DATA | LU_DEBUG_ERROR;

printf("lu_debugs = %p\n", lu_debugs);

lu_printf3(cmd,"this is cmd \n");

lu_printf3(data,"this is data\n");

lu_printf3(error,"this is error\n");

lu_printf4(0,"luther %s ,%d ,%d\n", "gliethttp", 1, 2);

return 0;

}

#include

static int lu_printf4_format(int prio, const char *fmt, ...)

{

#define LOG_BUF_SIZE (4096)

va_list ap;

char buf[LOG_BUF_SIZE];

va_start(ap, fmt);

vsnprintf(buf, LOG_BUF_SIZE, fmt, ap);

va_end(ap);

printf(": %s", prio, buf);

printf("------------------------\n");

printf(buf);

}

#define ENTER() LOGD("enter into %s", __FUNCTION__)

#define LOGD(...) ((void)LOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__))

#define LOG(priority, tag, ...) \

LOG_PRI(ANDROID_##priority, tag, __VA_ARGS__)

#define LOG_PRI(priority, tag, ...) \

android_printLog(priority, tag, __VA_ARGS__)

#define android_printLog(prio, tag, fmt...) \

__android_log_print(prio, tag, fmt)

http://www.linuxsir.org/bbs/showthread.php?t=302451

这里有篇不错的文章,[经验分享]程序日志中自动记录所在函数名、文件名、行号

比上面的要好多了:

[c-sharp] view plaincopy?

#include

#define LOG_DEBUG "DEBUG"

#define LOG_TRACE "TRACE"

#define LOG_ERROR "ERROR"

#define LOG_INFO  "INFOR"

#define LOG_CRIT  "CRTCL"

#define LOG(level, format, ...) \

do { \

fprintf(stderr, "[%s|%s@%s,%d] " format "\n", \

level, __func__, __FILE__, __LINE__, ##__VA_ARGS__ ); \

} while (0)

int main()

{

LOG(LOG_DEBUG, "a=%d", 10);

return 0;

}

或者

[c-sharp] view plaincopy?

#define DBG(format, args...) fprintf(stderr, "[%s|%s@%s,%d] " format "\n", APP_NAME, __FUNCTION__, __FILE__, __LINE__, ## args );


相关内容

  • 从问题到程序--裘宗燕--课后习题部分答案
  • 第二章 练习 1. 指出下面的哪些字符序列不是合法的标识符: _abc x+- 3x1 Xf_1__4 Eoof___ x__x__2 ____ I am 答:不合法的标示符有: a$#24 非法符号# x+- 非法符号# 3x1 不是以英文字母开头 I am 非法符号"空格" ...

  • 实验五 模块化的程序设计
  • 实验五 模块化的程序设计 实验目的 (1)理解自顶向下,逐步细化的模块化设计思想划分子模块:知道模块化程序设计方法. (2)熟悉函数的定义.函数的声明和函数的调用,理解函数调用的实现过程. (3)理解函数调用时的数据传送机制,通过参数将主调函数的数据传递到被调函数,运用 return语句将被调函数的 ...

  • 数据结构报告正文
  • 第一章 1.1数据结构课程设计要求. 1.1.1数据结构课程设计问题描述. 从键盘读入一组数据,建立二叉排序树并对其进行查找.遍历.格式化打印等有关操作. 1.1.2数据结构课程设计基本要求. 建立二叉排序树并对其进行查找,包括成功和不成功两种情况,并给出查找长度. 1.2.1数据结构课程设计测试数 ...

  • Windows程序调试时快速记录日志的方法2.X
  • Windows程序调试时快速记录日志的方法 邓俊 (江苏科技大学 计算机科学与工程学院,江苏省镇江市,212003) 摘 要:生成日志信息是程序调试中常用的方法:将运行过程中的某些信息记录下来事后分析,有助于发现程序中的错误.目前记录日志的方法存在两大缺点:速度慢和程序崩溃时容易丢失信息.本文从这两 ...

  • Javascript作用域和变量提升
  • [转载请注明来自: http://blog.csdn.net/sunxing007] 下面的程序是什么结果? [javascript] var foo = 1; function bar() { if (!foo) { var foo = 10; } alert(foo); } bar(); 结果是 ...

  • 操作系统进程调度实验报告
  • 学院 姓名 学号 教师评定_________________ 实验题目 进程调度 一.实验目的 用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解. 二.实验内容和要求 设计一个有N个进程并发的进程调度程序,要采用FIFO(先进先出).简单时间片轮转法.多级反馈队列调度算法 ...

  • 校园导航系统课程设计
  • 校园导航 课 程设 计报 专 业:计算机科学与技术 课程设计名称:<数据结构课程设计> 题 目:校园导航问题 班 级: 学 号: 姓 名: 同 组 人 员: 指 导 老 师: 完 成 时 间:2012年2月17日 告书 摘要 校园导航问题是基于校园中的不同的景点,从陌生人的角度,为来往的 ...

  • 2016年计算机二级c语言题库及答案;
  • 2016年计算机二级c 语言题库及答案 一.选择题(每小题1分,共40小题,共40分) 1. 设循环队列的存储空间为Q(1:35) ,初始状态为front=rear=35.现经过一系列入队与退队运算后,front=15,rear=15,则循环队列中的元素个数为( ). A.20 B.0或35 C.1 ...

  • c语言程序设计论文
  • 天津电子信息职业技术学院 暨国家示范性软件职业技术学院 二级C 编程实训报告 姓 名: 邢书鹏 系 别: 网络系 专 业: 计算计控制 班 级: 计控s11-1 指导教师: 邵慧娟 完成时间: 2012 年 6 月 1 日 十个程序运算的综合设计 一.前言 C 语言是一门长盛不衰的程序设计语言,深受 ...