linux下C语言实现写日志功能
先上程序,该程序经过测试能够很好的实现写日志要求
/************************************************************************* >FileName:log.c >Author: ************************************************************************/ #include#include #include #include #include #include #include #include #include intsafe_asprintf(char**strp,constchar*fmt,...); intsafe_vasprintf(char**strp,constchar*fmt,va_listap); voidplog(constchar*format,...); voidpinfo(constchar*format,...); #defineDEBUG #ifdefDEBUG voidplog(constchar*format,...); voidpinfo(constchar*format,...); #definedebug(fmt,args...)plog(fmt,##args) #else #definedebug(fmt,args...)do{}while(0) #endif staticpthread_mutex_tfileMutex=PTHREAD_MUTEX_INITIALIZER; intmain(intargc,char*argv) { return0; } /* *safe_asprintf(); */ intsafe_asprintf(char**strp,constchar*fmt,...) { va_listap; intretval; va_start(ap,fmt); retval=safe_vasprintf(strp,fmt,ap); va_end(ap); returnretval; } /* *safe_vasprintf(); */ intsafe_vasprintf(char**strp,constchar*fmt,va_listap) { intretval; retval=vasprintf(strp,fmt,ap); if(retval==-1) { printf("Failedtovasprintf:%s.Bailingout\n",strerror(errno)); return1; } returnretval; } /* *plog(); */ voidplog(constchar*format,...) { pthread_mutex_lock(&fileMutex); FILE*fp=NULL; va_listvlist; char*fmt=NULL; //Opendebuginfooutputfile. if(!(fp=fopen("log.txt","a+"))){ pthread_mutex_unlock(&fileMutex); return; } va_start(vlist,format); safe_vasprintf(&fmt,format,vlist); va_end(vlist); if(!fmt){ pthread_mutex_unlock(&fileMutex); return; } time_ttimep; structtm*ptm=NULL; time(&timep); ptm=localtime(&timep); fprintf(fp,"[%04d-%02d-%02d-%02d-%02d-%02d]%s", ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec, fmt); free(fmt); fsync(fileno(fp)); fclose(fp); pthread_mutex_unlock(&fileMutex); } /* *pinfo(); */ voidpinfo(constchar*format,...) { pthread_mutex_lock(&fileMutex); FILE*fp=NULL; va_listvlist; char*fmt=NULL; //Opendebuginfooutputfile. if(!(fp=fopen("log.txt","a+"))){ pthread_mutex_unlock(&fileMutex); return; } va_start(vlist,format); safe_vasprintf(&fmt,format,vlist); va_end(vlist); if(!fmt){ pthread_mutex_unlock(&fileMutex); return; } fprintf(fp,"%s",fmt); free(fmt); fsync(fileno(fp)); fclose(fp); pthread_mutex_unlock(&fileMutex); }
程序实现的日志格式为:
时间+空格+具体实现(自己的调试内容)
本段程序值得学习的地方:
- va_list结构体的使用
- linux的格式化输出字符串
- 文件操作过程中pthread_mutex锁的使用,以及他的优点
- linuxDEBUG的应用,方便调试
linux如何查看日志:
使用tail命令可以实现日志的查询,以及其他功能,不了解的话,自行查资料解决。
对上面应用不明白的请自行查资料解决。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。