// 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);
}