#include#include#include#include#include#includechar cLastFileName[128];FILE *fLogLast=NULL;/** to get the time*/int GetCurrentTime(char *outtime){ struct tm *newtime; time_t aclock; int year; char curtime[30]; aclock=time(NULL); newtime=localtime(&aclock); year=newtime->tm_year+1900; snprintf(curtime,sizeof(curtime),"%.4d-%.2d-%.2d %.2d:%.2d:%.2d", year,newtime->tm_mon+1,newtime->tm_mday, newtime->tm_hour,newtime->tm_min,newtime->tm_sec); memcpy(outtime,curtime,20); return 0;}int WriteLog(const char * sector,...){ char Filename[128]; FILE *fp=NULL; char curtime[30]; char titlestr[128]; char infoline[128]; char datestr[11]; char pidstr[32]; memset(Filename,0,128); memset(curtime,0,30); memset(titlestr,0,128); memset(infoline,0,128); memset(datestr,0,11); memset(pidstr,0,32); va_list arg_ptr; char * arg = ""; char str_log[1024]; char ctime[128]; memset(str_log,0,1024); memset(ctime,0,128); /*to get the variable */ va_start(arg_ptr,sector); snprintf(pidstr,sizeof(pidstr),"[pid:%d] ", getpid()); snprintf(titlestr,sizeof(titlestr),"[%s] ",sector); GetCurrentTime(curtime); snprintf(ctime,sizeof(ctime),"[%s] ",curtime); //printf("ctime:%s\n",ctime); memcpy(datestr, curtime, 10);datestr[10]='\0'; if( (sector == NULL) ){ return 1; } else{ strcat(str_log,ctime); strcat(str_log,pidstr); strcat(str_log,titlestr); while(arg != NULL){ strcat(str_log,arg); arg = va_arg(arg_ptr,char*); } va_end(arg_ptr); strcat(str_log,"\n"); } //inorder to get the right name for logfile snprintf(Filename,sizeof(Filename),"test_lve%s.log", datestr); if(strcmp(Filename,cLastFileName)!=0) { if(!fLogLast) { fp=fopen(Filename,"a"); fLogLast=fp; snprintf(cLastFileName,sizeof(cLastFileName),"%s",Filename); } else { fclose(fLogLast); fLogLast=NULL; fp=fopen(Filename,"a"); fLogLast=fp; snprintf(cLastFileName,sizeof(cLastFileName),"%s",Filename); } } else { fp=fLogLast; } if(fp==NULL) { fprintf(stderr,"pid %d log deal fail\n",getpid()); return 1; } //printf("str_log:%s\n",str_log); fputs(str_log,fp); fflush(fp); //fclose(fp); return 0;}/*测试*/int main(){ WriteLog("test","log",NULL); return 0;}
运行后,出现日志
test_lve2012-09-05.log 2012-09-05 16:03:25] [pid:7780] [test] log如上的日志显示格式。