how to wirte a c log

// log.h; the header file which defines Log(); and LogErr(); 
//#include <stdbool.h> // include true false
#define LOGFILE "/data/tgt/wd.log" // all Log(); messages will be appended to this file 
extern _Bool LogCreated; // keeps track whether the log file is created or not 
void Log (char *message); // logs a message to LOGFILE 
void LogErr (char *message); // logs a message; execution is interrupted

// log.c; 
#include <stdlib.h> 
#include <stdio.h> 
//#include "system.h" // SysShutdown(); 
#include "log.h" 
_Bool LogCreated = 0; 
void Log (char *message) 
{ 
	FILE *file; 
	if (!LogCreated) 
	{ 
		file = fopen(LOGFILE, "w"); 
		LogCreated = 1; 
	} 
	else 
		file = fopen(LOGFILE, "a"); 
	if (file == NULL) 
	{ 
		if (LogCreated) 
			LogCreated = 0; 
		return; 
	} 
	else 
	{ 
		fputs(message, file); 
		fclose(file); 
	} 
	if (file) 
		fclose(file); 
} 
void LogErr (char *message) 
{ 
	Log(message); 
	Log("\n"); 
	//SysShutdown(); 
}

版本2:

// log.h; the header file which defines Log(); and LogErr(); 
//#include <stdbool.h> // include true false
#define LOGFILE "/data/tgt/wd.log" // all Log(); messages will be appended to this file 
extern _Bool LogCreated; // keeps track whether the log file is created or not 
//void Log (char *message); // logs a message to LOGFILE 
#define Log(level, format...) _log(__FILE__, __LINE__, level, format)
void LogErr (char *message); // logs a message; execution is interrupted

// log.c; 
#include <stdlib.h> 
#include <stdio.h> 
#include <time.h>
// for getpid
#include <unistd.h>
// for va_start etc functions
#include <stdarg.h>


//#include "system.h" // SysShutdown(); 
#include "log.h" 
_Bool LogCreated = 0; 
/*void Log (char *message) 
{ 
	FILE *file; 
	if (!LogCreated) 
	{ 
		file = fopen(LOGFILE, "w"); 
		LogCreated = 1; 
	} 
	else 
		file = fopen(LOGFILE, "a"); 
	if (file == NULL) 
	{ 
		if (LogCreated) 
			LogCreated = 0; 
		return; 
	} 
	else 
	{ 
		fputs(message, file); 
		fclose(file); 
	} 
	if (file) 
		fclose(file); 
} */
void LogErr (char *message) 
{ 
	//_log(message); 
	//_log("\n"); 
	//SysShutdown(); 
}

void _log(const char *filename, int line, int level, const char *format, ...)
{
	FILE *file; 
	char buf[28];
	time_t ts;
	va_list vlist;

    time(&ts);

	if (!LogCreated) 
	{ 
		file = fopen(LOGFILE, "w"); //truncate to 0 length or create for writing 
		LogCreated = 1; 
	} 
	else 
		file = fopen(LOGFILE, "a"); 
	if (file == NULL) 
	{ 
		if (LogCreated) 
			LogCreated = 0; 
		return; 
	} 
	else 
	{ 
		//fputs(message, file); 
		fprintf(file, "[%d][%.24s][%u](%s:%d) ", level, ctime_r(&ts, buf), getpid(),
                filename, line);
		va_start(vlist, format);
         vfprintf(file, format, vlist);
         va_end(vlist);
         fputc('\n', file);
		fclose(file); 
	} 
	// BUG: while free twice
	if (file) 
		fclose(file); 
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值