首页 > 代码库 > 用于调试的printf函数和自定义log函数
用于调试的printf函数和自定义log函数
1. 用宏定义调试用的DPRINT
#define DEBUG_ENABLE #ifdef DEBUG_ENABLE #define DPRINT(fmt, args...) fprintf(stderr, "[DPRINT...][%s %d] "fmt"\n", __FILE__, __LINE__, ##args); #else #define DPRINT(fmt, ...) #endif发布时,将#define DEBUG_ENABLE去掉即可
2. 自定义的log函数模型:
char LogLastMsg[128]; // all info of the last log, all the info to log last time int Log2Stderr = LOG_ERR; //control Loging to stderr /** * @Synopsis a log func demo * demo for how user defined module log info * * @Param priority: level of log, LOG_ERR, LOG_DEBUG etc. * @Param errno: errno * @Param fmt: format of message to log * @Param ...: args follow by fmt */ void mylog(int priority, int errno, char* fmt, ...) { DPRINT("mylog Begin..."); char priVc[][8] = {"Emerg", "Alert", "Crit", "Error", "Warning", "Notice", "Info", "Debug"}; char* priPt = priority < 0 || priority >= sizeof(priVc)/sizeof(priVc[0]) ? "Unknow priority!" : priVc[priority]; char *errMsg = errno <= 0 ? NULL : (const char*)strerror(errno); { va_list argPt; unsigned Ln; va_start(argPt, fmt); //now argPt is point to mylog's param:... Ln = snprintf(LogLastMsg, sizeof(LogLastMsg), "[mylog...][%s]: ", priPt); Ln += vsnprintf(LogLastMsg + Ln, sizeof(LogLastMsg) - Ln, fmt, argPt); if (NULL != errMsg) { Ln += snprintf(LogLastMsg + Ln, sizeof(LogLastMsg) - Ln, "%d:%s", errno, errMsg); } va_end(argPt); } //choose the log which should be show on stderr if (priority < LOG_ERR || priority <= Log2Stderr) { fprintf(stderr, "%s\n", LogLastMsg); } DPRINT("log to stderr"); //always to syslog syslog(priority, "%s", LogLastMsg); if (priority <= LOG_ERR) { exit(-1); } return ; }
用于调试的printf函数和自定义log函数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。