#include "error.h" FILE *logfile = NULL; int verbose = 0; char *log_level_str[] = { "Fatal", "Warning", "Notice", "Debug" }; int logfile_redirect(char *filename) { if (!(logfile = fopen(filename, "a+"))) { log_report(LOG_ERROR_FATAL, "Could not redirect log stream to `%s'.", filename); return(1); } return(0); } void log_report(int level, char *fmt, ...) { va_list args; FILE *log_stream; va_start(args, fmt); if ((level & LOG_TYPE_MASK) > verbose && !(level & LOG_FORCE)) return; if (logfile) log_stream = logfile; else log_stream = stderr; if (!(level & LOG_NOPREFIX)) fprintf(log_stream, "(%s) ", log_level_str[level]); vfprintf(log_stream, fmt, args); fprintf(log_stream, "\n"); fflush(log_stream); }