用于调试的printf函数和自定义log函数

来源:互联网 发布:php post 返回json 编辑:程序博客网 时间:2024/05/09 07:46

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 timeint 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 ;}


1 0