本模块负责记录程序运行的日志,以备查询和分析程序行为,由log.h和log.c两个文件构成。
log.h
#ifndef LOG_H
#define LOG_H
#include
// 用于记录程序的行为
void logcmd(char *fmt,...);
// 打开日志文件
int init_logfile(char *filename);
// 将程序运行日志记录到文件
int logfile(char *file,int line,char *msg);
#endif
以下是log.c文件:
bterror.c
#include
#include
#include
#include
#include
#include
#include
#include "log.h"
// 日志文件的描述符
int logfile_fd = -1;
// 在命令行上打印一条日志
void logcmd(char *fmt,...)
{
va_list ap;
va_start(ap,fmt);
vprintf(fmt,ap);
va_end(ap);
}
// 打开记录日志的文件
int init_logfile(char *filename)
{
logfile_fd = open(filename,O_RDWR|O_CREAT|O_APPEND,0666);
if(logfile_fd < 0) {
printf("open logfile failed\n");
return -1;
}
return 0;
}
// 将一条日志写入日志文件
int logfile(char *file,int line,char *msg)
{
char buff[256];
if(logfile_fd < 0) return -1;
snprintf(buff,256,"%s:%d %s\n",file,line,msg);
write(logfile_fd,buff,strlen(buff));
return 0;
}
程序说明。
函数logcmd是一个变长参数的函数,也就是函数的参数个数是可变的,类似于printf函数。语句“logcmd(“%s:%d error\n”,__FILE__, __LINE__);”的功能与“printf(“%s:%d error\n”,__FILE__, __LINE__);”功能相同。