#ifndef __WRITE_LOG_H__ #define __WRITE_LOG_H__ /* *Filename: WriteLog.h *Author: 逐影 *Created: 2014 - 08月 - 29 *Last modified: 2014 - 08月 - 29 * */ #include <sys/time.h> #include <unistd.h>//sleep函数 #include <stdio.h> #include <stdarg.h> //WRITE_LOG #define LL_ERROR 50 #define LL_MSG 40 #define LL_WARING 30 #define LL_TRACE 20 #define LL_DEBUG 10 extern int g_level; /** * struct timeval { * time_t tv_sec; // seconds * time_t tv_usec; // microseconds * }; **/ extern struct timeval tv_start; extern struct timeval tv_end; extern double dfTim; extern double timediff; static void PL_LOG(int nLevel, const char *file, const int line, const char* format, ...); #define PL_ERROR(msg, ...) PL_LOG(LL_ERROR, __FILE__, __LINE__, msg, __VA_ARGS__) #define PL_MSG(msg, ...) PL_LOG(LL_MSG, __FILE__, __LINE__, msg, __VA_ARGS__) #define PL_WARING(msg, ...) PL_LOG(LL_WARING, __FILE__, __LINE__, msg, __VA_ARGS__) #define PL_TRACE(msg, ...) PL_LOG(LL_TRACE, __FILE__, __LINE__, msg, __VA_ARGS__) #define PL_DEBUG(msg, ...) PL_LOG(LL_DEBUG, __FILE__, __LINE__, msg, __VA_ARGS__) void PL_LOG(int nLevel, const char *file, const int line, const char* format, ...) /*…为可变参数,不限定个数和类型。(后面采用专门的指针指向他)*/ { va_list ap; //初始化指向可变参数列表的指针 char buf[1024]; //定义存放可变参数转化成格式化字符串的数组。 char log[1024]; int res = 0; char *tf = (char *)file; char *sf = NULL; if(nLevel < g_level) { return; } va_start(ap, format); //将第一个可变参数的地址赋给ap,即ap指向可变参数列表的开始。 res = vsprintf(buf, format, ap); //将参数ap和format进行转化形成格式化字符串,即可以显示的字符串。 va_end(ap);//将参数ap复位。 while((sf = strstr(tf, "/")) != NULL) { sf ++; tf = sf; } if(res >= 0) { snprintf(log, sizeof(log), "<%s:%d> | %s\n", tf, line, buf); printf("%s", log); } return; } //它获得的时间精确到微秒(1e-6 s)量级 //输出JMVC版本信息 #define PL_VERSION() \ {\ PL_MSG("JMVC %s Encoder (running on a %d-bit system)\n", _JMVC_VERSION_, sizeof(void*)*8);\ } #define FUN_START(p)\ {\ gettimeofday(&tv_start, NULL);\ PL_MSG("[%s] Start [%ld]", p, tv_start.tv_sec);\ } #define FUN_END(p)\ {\ gettimeofday(&tv_end, NULL);\ PL_MSG("[%s] End [%ld]", p, tv_end.tv_sec);\ timediff = (tv_end.tv_sec - tv_start.tv_sec)*1000000 + ( tv_end.tv_usec - tv_start.tv_usec);\ dfTim = timediff/1000000;\ PL_MSG("编码时间约:%f 秒", dfTim);\ } #endif