#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测试信息");
}
分享到:
相关推荐
对数据敏感操作的日志记录; 4.对查询结果的简单数量统计。】 缺陷:没有排序功能,统计能不够强大,对非法或刁难的数据处理效果微弱。 (感兴趣的朋友可以试着填补上述缺陷) 【水平有限,代码仅作参考。 有不足...
第18章 C语言 18.1 MySQL C API(libmysqlclient) 18.2 Hello,World 18.3 与MySQL服务器建立连接 18.4 执行SQL命令 18.5 处理二进制数据和特殊字符 18.6 出错处理 第19章 Visual Basic 6/VBA ...
目 录 第一部分 Linux 操作环境 第1章 Linux基础 1.1 登录Linux系统 1.2 Linx的shell 1.3 shell的一些基本命令 第2章 文本编辑 2.1 vi文本编辑器 2.2 emacs文本编辑器 ...18.9 附录:优秀的日志文件系统——ext3
第18章 C语言 18.1 MySQL C API(libmysqlclient) 18.2 Hello,World 18.3 与MySQL服务器建立连接 18.4 执行SQL命令 18.5 处理二进制数据和特殊字符 18.6 出错处理 第19章 Visual Basic 6/...
29.2 维护it基础设施 29.3 更多信息 29.4 informix与其他参考资料 第30章 数据仓库的日常需求 30.1 过程 30.2 更多信息 30.3 informix与其他参考资料 第四部分 性能调整 第31章 应用程序调整 31.1 ...
9.4 日志记录 163 9.5 CGI和SSI 164 9.5.1 CGI 164 9.5.2 SSI 164 9.5.3 基本SSI指令 165 9.5.4 流控制 167 9.6 启动和停止服务器 167 9.6.1 手动启动服务器 167 9.6.2 /etc/rc.d httpd脚本 168 9.7 配置文件清单 ...
ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。 拉里•埃里森 就业前景 从就业与择业的...