当前位置: 首页 > 工具软件 > Log4c > 使用案例 >

c语言 log4c,关于log4c的使用有关问题

傅长恨
2023-12-01

C/C++ code#include

#include

#include

#ifdef WIN32

#include

#include

#else

#include

#include

#include

#define CRITICAL_SECTION pthread_mutex_t

#define _vsnprintf vsnprintf

#endif

//Log{

#define MAXLOGSIZE 100000000

#define ARRSIZE(x) (sizeof(x)/sizeof(x[0]))

#include

#include

char logfilename1[]="MyLog1.log";

char logfilename2[]="MyLog2.log";

char logstr[16000];

char datestr[16];

char timestr[16];

char ms10[3];

CRITICAL_SECTION cs_log;

FILE *flog;

int centisec() {

#ifdef WIN32

return ((GetTickCount()%1000L)/10)%100;

#else

struct timeval tv;

if (!gettimeofday(&tv,NULL)) {

return ((tv.tv_usec%1000000L)/10000)%100;

} else {

return 0;

}

#endif

}

#ifdef WIN32

void Lock(CRITICAL_SECTION *l) {

EnterCriticalSection(l);

}

void Unlock(CRITICAL_SECTION *l) {

LeaveCriticalSection(l);

}

#else

void Lock(CRITICAL_SECTION *l) {

pthread_mutex_lock(l);

}

void Unlock(CRITICAL_SECTION *l) {

pthread_mutex_unlock(l);

}

#endif

void LogV(const char *pszFmt,va_list argp) {

struct tm *now;

time_t aclock;

if (NULL==pszFmt||0==pszFmt[0]) return;

if (-1==_vsnprintf(logstr,ARRSIZE(logstr),pszFmt,argp)) logstr[ARRSIZE(logstr)-1]=0;

time(&aclock);

now=localtime(&aclock);

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(ms10,"%02d",centisec());

printf("%s %s.%s %s",datestr,timestr,ms10,logstr);

flog=fopen(logfilename1,"a");

if (NULL!=flog) {

fprintf(flog,"%s %s.%s %s",datestr,timestr,ms10,logstr);

if (ftell(flog)>MAXLOGSIZE) {

fclose(flog);

if (rename(logfilename1,logfilename2)) {

remove(logfilename2);

rename(logfilename1,logfilename2);

}

flog=fopen(logfilename1,"a");

if (NULL==flog) return;

}

fclose(flog);

}

}

void Log(const char *pszFmt,...) {

va_list argp;

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;

#ifdef WIN32

InitializeCriticalSection(&cs_log);

#else

pthread_mutex_init(&cs_log,NULL);

#endif

for (i=0;i<10000;i++) {

Log("This is a Log %04d from FILE:%s LINE:%d\n",i, __FILE__, __LINE__);

}

#ifdef WIN32

DeleteCriticalSection(&cs_log);

#else

pthread_mutex_destroy(&cs_log);

#endif

return 0;

}

 类似资料: