void WriteLog(const char *fm,...)__attribute__((format(printf,1,2)));
void WriteLog(const char *fm,...)
{
int iSize=0;
char buff[10*1024];
int i=0;
memset(buff,0,sizeof(buff));
char chTime[32]={0};
time_t now;
struct tm timenow;
time(&now);
localtime_r(&now,&timenow);
sprintf(chTime,"%04u-%02u-%02u %02u:%02u:%02u",1900+timenow.tm_year
,timenow.tm_mon+1,timenow.tm_mday,timenow.tm_hour,timenow.tm_min,timenow.tm_sec);
i=sprintf(buff,"%s/t",chTime);
va_list args;
va_start(args,fm);
iSize=vsnprintf(buff+i,sizeof(buff)-(i+1),fm,args);
va_end(args);
if(iSize>-1&&iSize<(int)(sizeof(buff)-(i+1)))
{
iSize+=i;
buff[iSize]='/n';
iSize++;
}
else
{
iSize=sprintf(buff,"%s/tWriteLog error,iSize %d",chTime,iSize);
}
cout<<buf;
char curData[16];
char fileName[3000];
GetCurData(curData);
memset(fileName,0,sizeof(fileName));
int j=0;
j=sprintf(fileName,"%s",PATH_LOG);
j+=sprintf(fileName+j,"%s",TYPE_LOG);
CheckFolder(fileName);
j+=sprintf(fileName+j,"/%s_%s%s",TYPE_LOG,curData,".log");
AppendToFile(fileName,buff,iSize);
return;
}
void GetCurData(char *curData)
{
time_t lTime;
struct tm tmTime;
time(&lTime);
localtime_r(&lTime,&tmTime);
tmTime.tm_min-=3;
time_t newtime=mktime(&tmTime);
localtime_r(&newtime,&tmTime);
strftime(curData,16,"%Y%m%d",&tmTime);
}
bool CheckFolder(const char *sPathName)
{
char DirName[256];
strcpy(DirName,sPathName);
int i,len=strlen(DirName);
if(DirName[len-1]!='/')
strcat(DirName,"/");
len=strlen(DirName);
for(i=1;i<len;i++)
{
if(DirName[i]=='/')
{
DirName[i]=0;
if(access(DirName,0)!=0)
{
if(mkdir(DirName,0755)==-1)
{
perror("mkdir error");
return false;
}
}
DirName[i]='/';
}
}
return true;
}
bool AppendToFile(const char *fileName,const char *content,size_t fileLength)
{
FILE *fp=NULL;
try
{
fp=fopen(fileName,"ab");
if(fp==NULL)
{
return false;
}
if(ftell(fp)<50*1024*1024)
{
fwrite(content,1,fileLength,fp);
}
fclose(fp);
}
catch(...)
{
fclose(fp);
return false;
}
return true;
}