`
microjava
  • 浏览: 309409 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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测试信息");
}

分享到:
评论

相关推荐

    基于链表的学生信息管理系统之C语言实现(分享版).rar

    对数据敏感操作的日志记录; 4.对查询结果的简单数量统计。】 缺陷:没有排序功能,统计能不够强大,对非法或刁难的数据处理效果微弱。 (感兴趣的朋友可以试着填补上述缺陷) 【水平有限,代码仅作参考。 有不足...

    MySQL5 权威指南第3版中文版_part1

     第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__第二版_doc格式

    目 录 第一部分 Linux 操作环境 第1章 Linux基础 1.1 登录Linux系统 1.2 Linx的shell 1.3 shell的一些基本命令 第2章 文本编辑 2.1 vi文本编辑器 2.2 emacs文本编辑器 ...18.9 附录:优秀的日志文件系统——ext3

    MySQL 5权威指南(第3版) 中文版 下载地址

     第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/...

    informix 实用大全

    29.2 维护it基础设施 29.3 更多信息 29.4 informix与其他参考资料 第30章 数据仓库的日常需求 30.1 过程 30.2 更多信息 30.3 informix与其他参考资料 第四部分 性能调整 第31章 应用程序调整 31.1 ...

    RED HAT LINUX 6大全

    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学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。  拉里•埃里森  就业前景 从就业与择业的...

Global site tag (gtag.js) - Google Analytics