一个不错输出日志文件代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#ifdefWIN32
#include<windows.h>
#include<io.h>
#else
#include<unistd.h>
#include<sys/
time
.h>
#include<pthread.h>
#defineCRITICAL_SECTIONpthread_mutex_t
#define_vsnprintfvsnprintf
#endif
//Log{
#defineMAXLOGSIZE20000000
#defineMAXLINSIZE16000
#include<time.h>
#include<sys/timeb.h>
#include<stdarg.h>
char
logfilename1[]=
"MyLog1.log"
;
char
logfilename2[]=
"MyLog2.log"
;
static
char
logstr[MAXLINSIZE+1];
char
datestr[16];
char
timestr[16];
char
mss[4];
CRITICAL_SECTIONcs_log;
FILE
*flog;
#ifdefWIN32
void
Lock(CRITICAL_SECTION*l){
EnterCriticalSection(l);
}
void
Unlock(CRITICAL_SECTION*l){
LeaveCriticalSection(l);
}
#else
void
Lock(CRITICAL_SECTION*l){
pthread_mutex_lock(l);
}
voidUnlock(CRITICAL_SECTION*l){
pthread_mutex_unlock(l);
}
#endif
voidLogV(constchar*pszFmt,va_listargp){
structtm*now;
structtimebtb;
if(NULL==pszFmt||0==pszFmt[0])return;
_vsnprintf(logstr,MAXLINSIZE,pszFmt,argp);
ftime(&tb);
now=localtime(&tb.time);
sprintf(datestr,"%04d-%02d-%02d",now->tm_year+1900,now->tm_mon+1,now->tm_mday);
sprintf(timestr,"%02d:%02d:%02d",now->tm_hour,now->tm_min,now->tm_sec);
sprintf(mss,"%03d",tb.millitm);
printf("%s%s.%s%s",datestr,timestr,mss,logstr);
flog=fopen(logfilename1,"a");
if(NULL!=flog){
fprintf(flog,"%s%s.%s%s",datestr,timestr,mss,logstr);
if(ftell(flog)>MAXLOGSIZE){
fclose(flog);
if(rename(logfilename1,logfilename2)){
remove(logfilename2);
rename(logfilename1,logfilename2);
}
}else{
fclose(flog);
}
}
}
voidLog(constchar*pszFmt,...){
va_listargp;
Lock(&cs_log);
va_start(argp,pszFmt);
LogV(pszFmt,argp);
va_end(argp);
Unlock(&cs_log);
}
//Log}
int
main(
int
argc,
char
*argv[]){
int
i;
#ifdefWIN32
InitializeCriticalSection(&cs_log);
#else
pthread_mutex_init(&cs_log,NULL);
#endif
for
(i=0;i<10000;i++){
Log(
"ThisisaLog%04dfromFILE:%sLINE:%d\n"
,i,__FILE__,__LINE__);
}
#ifdefWIN32
DeleteCriticalSection(&cs_log);
#else
pthread_mutex_destroy(&cs_log);
#endif
return
0;
}
//1-78行添加到你带main的.c或.cpp的那个文件的最前面
//81-85行添加到你的main函数开头
//89-93行添加到你的main函数结束前
//在要写LOG的地方仿照第87行的写法写LOG到文件MyLog1.log中
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。