#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测试信息");
}
分享到:
相关推荐
书中可能会讨论如何使用条件语句、异常处理和日志记录来编写健壮的代码,以及如何利用调试工具查找和修复问题。 最后,本书很可能会涵盖一些高级话题,如预处理器宏的使用、位操作、多线程编程以及内存管理策略,...
本文将围绕“logc.rar”这个C语言实现的日志记录库进行深入探讨。 标题中的“logc.rar”指的是一个压缩包文件,其中包含了C语言编写的日志记录代码。C语言是一种基础且高效的编程语言,适用于编写底层系统软件,...
"C语言编程精选100例源码"这个资源集成了100个精心挑选的C语言编程实例,旨在帮助初学者和进阶者更好地理解和掌握C语言的核心概念及应用技巧。 首先,C语言的基础包括数据类型、变量、运算符、控制结构(如if语句、...
总的来说,C语言6.0编程设计软件提供了一个实用的平台,使初学者能够学习并实践C语言编程,同时也适合经验丰富的程序员进行项目开发。通过结合键盘和鼠标的操作,用户可以在Windows XP环境下轻松地编写、调试和运行...
C语言作为底层编程的基础,常被用来编写高效的日志管理系统。本篇将围绕"日志文件源代码(C语言)"这个主题,深入探讨C语言在Linux环境下如何实现日志管理,并结合提供的文件`yllog.c`和`yllog.h`进行分析。 首先,...
C语言是编程的基础,它的语法简洁,运行效率高,因此用C编写的日志库特别适合嵌入式系统和资源有限的环境。这样的函数包通常包含一系列的API,用于输出不同级别的日志信息,如DEBUG、INFO、WARNING、ERROR和FATAL等...
这对于数据存储、日志记录和文件系统交互至关重要。 C语言也支持结构体和联合体,它们是组织复杂数据类型的方式。结构体可以将不同类型的数据组合在一起,而联合体则可以在同一内存空间中存储不同类型的值,这在...
- 编程基础:介绍程序、算法和语法的概念,以及C语言的编辑、编译和执行过程。 2. **C程序的基本组成**: - 程序特点:通过实例讲解C语言的特点,如结构化、静态类型等。 - 环境配置:展示VC++环境下C语言程序的...
ARM9上的C语言编程基础 - **数据类型和内存管理**:理解C语言的数据类型如int、char、float等,以及如何分配和释放内存,对ARM9的内存模型有深入了解。 - **指针操作**:在ARM9上,通过指针可以直接操作内存,这...
这本书涵盖了C语言编程的方方面面,旨在通过大量的实例帮助学习者深入理解和掌握C语言的基本概念、语法结构以及编程技巧。以下将从多个方面对C语言的知识点进行详细解释。 1. **基本语法与数据类型**:C语言的基础...
时间概念在许多程序中都有应用,比如计时器、日志记录等。在C语言中,可以使用time.h头文件中的函数来处理时间,如time()、difftime()、strftime()等,以获取当前时间、计算时间差或格式化时间显示。 最后,Linux下...
在深入探讨"嵌入式系统高级C语言编程"这一主题之前,我们首先需要理解C语言的基础和它在嵌入式领域的应用。C语言是一种强大的、结构化的编程语言,以其高效、灵活和对底层硬件的直接访问能力而闻名,这使得它成为...
在键盘记录器中,这个信息对于关联键盘输入与特定应用程序或窗口非常重要,从而提供更详细的日志记录。 ### 5. 文件操作 虽然代码片段没有展示具体的文件读写逻辑,但`FILE* fp;`的声明暗示了程序可能会将键盘记录...
实例可能包含文件的打开、读写、关闭,以及文件定位,如日志记录或数据持久化。 通过这些实例,你可以逐步熟悉并掌握C语言的关键概念和技术。每个实例都是一个独立的小项目,它们将理论知识与实际编程紧密结合,有...
《C语言经典编程900例》是一本深入学习C语言编程的宝贵资源,它包含了900个经典的编程实例,旨在帮助读者掌握C语言的基础和高级特性,提高实际编程能力。这本书通过丰富的实例,让学习者能够在实践中理解C语言的语法...
### C语言基础知识详解 #### 一、C语言简介 ...本文通过详细阐述C语言的基础知识,希望能够帮助读者建立坚实的编程基础,并鼓励大家通过不断的实践和练习来加深对C语言的理解和掌握,成为一名真正的编程高手。
错误处理和日志记录对于调试和维护系统也至关重要,它们能够帮助开发者及时了解系统运行状态,快速响应系统中出现的异常情况。 文档中提到的“www.pudn.com.txt”可能指向一个资源链接或清单,这类资源可能是线上...
- 利用日志记录运行时状态。 - **C语言与其他编程语言相比有何特点?** - 高效性:接近机器级的执行效率。 - 通用性:可用于多种平台与环境。 - 可移植性:标准C程序可以在不同的硬件架构上编译运行。 - **...
在Linux环境下进行C语言编程是许多开发者和技术爱好者的基础技能,尤其对于系统级编程和嵌入式领域至关重要。本文将深入探讨Linux系统与C语言的结合,帮助读者掌握在Linux下编写C程序的关键知识点。 首先,了解...