#include /*syslog 等级
* LOG_EMERG 0 紧急状态
* LOG_ALERT 1 必须立即修复状态
* LOG_CRIT 2 严重状态
* LOG_ERR 3 出错状态
* LOG_WARNING 4 警告状态
* LOG_NOTICE 5 正常,但重要的状态
* LOG_INFO 6 信息性消息
* LOG_DEBUG 7 调试消息
*/
// 主要是因为使用到了 vprintf 、vfprintf、vsyslog等函数,在x86的ubuntu14.04中,不能连续使用,需要拷贝一份 va_list 参数
// vfprintf 连续使用时,需要复制一份, 本文主要是 vprintf、vfprintf的连续使用
// 参见 :https://bbs.csdn.net/topics/390841785 中2楼所说 ,感谢 alofm 博主
// 本人使用的嵌入式平台是 TI-am3354
#define x86 1
#define PROGRAM "[process name] "
void my_syslog(unsigned int lev,const char *msg,...);
#define mypfdbg
#ifdef mypfdbg
#define my_debug(format,...) my_syslog(LOG_DEBUG, PROGRAM "[%s:%d] " format,__FILE__,__LINE__,##__VA_ARGS__)
#else
#define my_debug(format,...)
#endif
#define my_info(format,...) my_syslog(LOG_INFO, PROGRAM "[%s:%d] " format,__FILE__,__LINE__,##__VA_ARGS__)
#define my_err(format,...) my_syslog(LOG_ERR, PROGRAM "[%s:%d] " format,__FILE__,__LINE__,##__VA_ARGS__)
unsigned char flag_pf = 1; //程序是否前台运行的标记,通过命令行传入参数确地是否前台运行,并修改
unsigned char dbg_lev = 7; //syslog的打印级别,通过命令行传入参数修改
FILE *fp = NULL;
int init_file_point(void)
{
if(NULL==fp)
fp = fopen("/home/mydir/test.log","a+");
if(NULL!=fp)
return 0;
else
return -1;
}
// 添加时间标记前缀
static void add_time_tag(char *dst,int bufsize,const char *format,...)
{
time_t now;
time(&now);
struct tm *local;
local = localtime(&now);
strftime(dst,bufsize,"%m-%d %T ",local);
strcat(dst,format);
}
void my_syslog(unsigned int lev,const char *msg,...)
{
int len = 0,mal_flag = 0, bufsize = 0;
char *ptr = NULL;
char buf[512] = {0};
if(lev<=dbg_lev) //默认的打印等级
{
va_list ap;
openlog("tag",LOG_PID,LOG_USER);
va_start(ap,msg);
if( (flag_pf) || (lev==LOG_ERR) )
{
len = strlen(msg);
if(len 再次感谢谢谢 Z_Dream_ST 、alofm两位博主!!! 其中有些异常没有考虑,仅示例基本功能,如有考虑不周的地方,还望指正。谢谢!