`
microjava
  • 浏览: 318647 次
  • 性别: 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语言编程精粹.pdf

    书中可能会讨论如何使用条件语句、异常处理和日志记录来编写健壮的代码,以及如何利用调试工具查找和修复问题。 最后,本书很可能会涵盖一些高级话题,如预处理器宏的使用、位操作、多线程编程以及内存管理策略,...

    logc.rar_C C 日志_C语言日志记录_Linux日志_logc语言_日志系统

    本文将围绕“logc.rar”这个C语言实现的日志记录库进行深入探讨。 标题中的“logc.rar”指的是一个压缩包文件,其中包含了C语言编写的日志记录代码。C语言是一种基础且高效的编程语言,适用于编写底层系统软件,...

    C语言编程精选100例源码

    "C语言编程精选100例源码"这个资源集成了100个精心挑选的C语言编程实例,旨在帮助初学者和进阶者更好地理解和掌握C语言的核心概念及应用技巧。 首先,C语言的基础包括数据类型、变量、运算符、控制结构(如if语句、...

    C语言6.0编程设计软件

    总的来说,C语言6.0编程设计软件提供了一个实用的平台,使初学者能够学习并实践C语言编程,同时也适合经验丰富的程序员进行项目开发。通过结合键盘和鼠标的操作,用户可以在Windows XP环境下轻松地编写、调试和运行...

    日志文件源代码(C语言)

    C语言作为底层编程的基础,常被用来编写高效的日志管理系统。本篇将围绕"日志文件源代码(C语言)"这个主题,深入探讨C语言在Linux环境下如何实现日志管理,并结合提供的文件`yllog.c`和`yllog.h`进行分析。 首先,...

    方便易用纯c语言日志函数包

    C语言是编程的基础,它的语法简洁,运行效率高,因此用C编写的日志库特别适合嵌入式系统和资源有限的环境。这样的函数包通常包含一系列的API,用于输出不同级别的日志信息,如DEBUG、INFO、WARNING、ERROR和FATAL等...

    C语言编程技巧程序集

    这对于数据存储、日志记录和文件系统交互至关重要。 C语言也支持结构体和联合体,它们是组织复杂数据类型的方式。结构体可以将不同类型的数据组合在一起,而联合体则可以在同一内存空间中存储不同类型的值,这在...

    C语言教学日志

    - 编程基础:介绍程序、算法和语法的概念,以及C语言的编辑、编译和执行过程。 2. **C程序的基本组成**: - 程序特点:通过实例讲解C语言的特点,如结构化、静态类型等。 - 环境配置:展示VC++环境下C语言程序的...

    ARM9的C语言编程

    ARM9上的C语言编程基础 - **数据类型和内存管理**:理解C语言的数据类型如int、char、float等,以及如何分配和释放内存,对ARM9的内存模型有深入了解。 - **指针操作**:在ARM9上,通过指针可以直接操作内存,这...

    C语言经典编程900实例

    这本书涵盖了C语言编程的方方面面,旨在通过大量的实例帮助学习者深入理解和掌握C语言的基本概念、语法结构以及编程技巧。以下将从多个方面对C语言的知识点进行详细解释。 1. **基本语法与数据类型**:C语言的基础...

    Linux操作系统下C语言编程入门

    时间概念在许多程序中都有应用,比如计时器、日志记录等。在C语言中,可以使用time.h头文件中的函数来处理时间,如time()、difftime()、strftime()等,以获取当前时间、计算时间差或格式化时间显示。 最后,Linux下...

    C语言进阶——嵌入式系统高级C语言编程

    在深入探讨"嵌入式系统高级C语言编程"这一主题之前,我们首先需要理解C语言的基础和它在嵌入式领域的应用。C语言是一种强大的、结构化的编程语言,以其高效、灵活和对底层硬件的直接访问能力而闻名,这使得它成为...

    键盘记录C语言程序

    在键盘记录器中,这个信息对于关联键盘输入与特定应用程序或窗口非常重要,从而提供更详细的日志记录。 ### 5. 文件操作 虽然代码片段没有展示具体的文件读写逻辑,但`FILE* fp;`的声明暗示了程序可能会将键盘记录...

    C语言编程实例第51至第100

    实例可能包含文件的打开、读写、关闭,以及文件定位,如日志记录或数据持久化。 通过这些实例,你可以逐步熟悉并掌握C语言的关键概念和技术。每个实例都是一个独立的小项目,它们将理论知识与实际编程紧密结合,有...

    C语言经典编程900例

    《C语言经典编程900例》是一本深入学习C语言编程的宝贵资源,它包含了900个经典的编程实例,旨在帮助读者掌握C语言的基础和高级特性,提高实际编程能力。这本书通过丰富的实例,让学习者能够在实践中理解C语言的语法...

    本文将详细阐述C语言的基础知识,帮助读者建立坚实的编程基础

    ### C语言基础知识详解 #### 一、C语言简介 ...本文通过详细阐述C语言的基础知识,希望能够帮助读者建立坚实的编程基础,并鼓励大家通过不断的实践和练习来加深对C语言的理解和掌握,成为一名真正的编程高手。

    Embed_C.rar_C语言程序设计_嵌入式C语言_嵌入式C语言编程_嵌入式c

    错误处理和日志记录对于调试和维护系统也至关重要,它们能够帮助开发者及时了解系统运行状态,快速响应系统中出现的异常情况。 文档中提到的“www.pudn.com.txt”可能指向一个资源链接或清单,这类资源可能是线上...

    c语言编程学习专家教程

    - 利用日志记录运行时状态。 - **C语言与其他编程语言相比有何特点?** - 高效性:接近机器级的执行效率。 - 通用性:可用于多种平台与环境。 - 可移植性:标准C程序可以在不同的硬件架构上编译运行。 - **...

    Linux-C语言编程系列

    在Linux环境下进行C语言编程是许多开发者和技术爱好者的基础技能,尤其对于系统级编程和嵌入式领域至关重要。本文将深入探讨Linux系统与C语言的结合,帮助读者掌握在Linux下编写C程序的关键知识点。 首先,了解...

Global site tag (gtag.js) - Google Analytics