c语言 log4c,關於C語言中使用log4c

試試用我這個?

#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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值