c语言编程基础之日志记录


#include <unistd.h>
#include <time.h>
#include <sys/signal.h>
#include <sys/stat.h>
#include<stdio.h>
#include<varargs.h>
#include<stdarg.h>
#define cgDebug 2 //日志级别 3 debug 2 info 1 warn 0 error
#define agDebugfile "mylog.log"

/**
***将time()函数取得的秒数转成具体日期时间.
***参数datetime是传进的time()函数取得的秒数
***返回时间格式为YYYY/MM/DD-hh:mm:ss的字符串
**/
char * changeDt(long *datetime)
{
struct tm *T;
char buf[101],temp[5];

T=localtime(datetime);

sprintf(buf,"%d/",T->tm_year+1900);
if(T->tm_mon+1<10)
strcat(buf,"0");
memset(temp,0x00,sizeof(temp));
sprintf(temp,"%d/",T->tm_mon+1);
strcat(buf,temp);
if(T->tm_mday<10)
strcat(buf,"0");
memset(temp,0x00,sizeof(temp));
sprintf(temp,"%d-",T->tm_mday);
strcat(buf,temp);
if(T->tm_hour<10)
strcat(buf,"0");
memset(temp,0x00,sizeof(temp));
sprintf(temp,"%d:",T->tm_hour);
strcat(buf,temp);
if(T->tm_min<10)
strcat(buf,"0");
memset(temp,0x00,sizeof(temp));
sprintf(temp,"%d:",T->tm_min);
strcat(buf,temp);
if(T->tm_sec<10)
strcat(buf,"0");
memset(temp,0x00,sizeof(temp));
sprintf(temp,"%d",T->tm_sec);
strcat(buf,temp);

return(buf);
}

/**
***取系统日期和时间
**/
int GetDt(char *dt)
{
long datetime;
time( &datetime );
strcpy(dt,changeDt(&datetime));
return 0;
}

/**
***打印日志,iDebug是打印级别,成功返回0,失败返回-1
**/
int TraceLog(iDebug, saFileName, iLine, frm, va_alist)
short iDebug;
char *saFileName;
int iLine;
char *frm;
va_dcl
{
static short ilTrace_flag = 0;
static long llLogfilesize = 0;
FILE *fp;
char buf[2048],fname1[100],buf1[2048],alCmdbuf[200];
va_list ap;
struct tm *sttm;
int ilRc;
long llDatetime;
short ilRn;
struct stat sgbuf;
int rc;
char buf2[256];

if ( cgDebug < iDebug ) return(0);
signal(SIGTTOU,SIG_IGN);

memset(buf,0x00,sizeof(buf));
memset(buf1,0x00,sizeof(buf1));
memset(fname1,0x00,sizeof(fname1));
if (*frm)
{
va_start(ap);
vsprintf(buf, frm, ap);
va_end(ap);
}
/* 自动清空大于 8M 文件*/
llLogfilesize = 8388608L;

sprintf(fname1,"%s/item/zhlx/log/%s",getenv("HOME"),agDebugfile);
rc=stat(fname1, &sgbuf);
if (sgbuf.st_size > llLogfilesize)
{
time(&llDatetime);
sttm = localtime( &llDatetime );

sprintf(alCmdbuf,"mv %s %s.%02d%02d%02d%02d%02d",
fname1,fname1,
sttm->tm_mon+1,
sttm->tm_mday,
sttm->tm_hour,
sttm->tm_min,
sttm->tm_sec );
if ((access(fname1,F_OK)) != -1)
system(alCmdbuf);
}
if (( fp = fopen(fname1,"a+")) == NULL)
{
printf("打开日志文件出错\n");
return(-1);
}
GetDt(buf1);
sprintf(buf2, " % 10s->% 4d ", saFileName, iLine);
strcat(buf1,buf2);
strcat(buf1,buf);
fprintf(fp,"%s\n",buf1 + 5);
fclose(fp);
return(0);
}

main()
{
TraceLog(3,__FILE__, __LINE__,"debug测试信息");
TraceLog(2,__FILE__, __LINE__,"info测试信息");
TraceLog(1,__FILE__, __LINE__,"warn测试信息");
TraceLog(0,__FILE__, __LINE__,"error测试信息");
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值