simple-logger/logger.c

149 lines
2.8 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdarg.h>
#include <string.h>
#include "logger.h"
Logger logger;
void create_logger(char* logpath, LogLevel level) {
logger = malloc(sizeof(*logger));
logger->t0 = clock();
logger->level = level;
if (logpath[0] != '\0')
{
logger->logfile = fopen(logpath, "w");
}
else
logger->logfile = NULL;
}
void destroy_logger() {
if (logger->logfile != NULL)
fclose(logger->logfile);
free(logger);
}
void logprint(LogLevel level, char* str, va_list args)
{
clock_t t = clock();
char label[6];
switch (level)
{
case (PANIC):
strcpy(label, "PANIC");
break;
case (FATAL):
strcpy(label, "FATAL");
break;
case (ERROR):
strcpy(label, "ERROR");
break;
case (WARN):
strcpy(label, "WARN");
break;
case (INFO):
strcpy(label, "INFO");
break;
case (DEBUG):
strcpy(label, "DEBUG");
break;
case (TRACE):
strcpy(label, "TRACE");
break;
}
FILE* stream = (level >= WARN) ? stderr : stdout;
if (level < logger->level)
return;
fprintf(stream, "[%s][%f]: ", label, (double)t / CLOCKS_PER_SEC);
vfprintf(stream, str, args);
fprintf(stream, "\n");
if (logger->logfile != NULL)
{
fprintf(logger->logfile, "[%s][%f]: ", label, (double)t / CLOCKS_PER_SEC);
vfprintf(logger->logfile, str, args);
fprintf(logger->logfile, "\n");
}
}
void panic(char *str, ...)
{
va_list args;
va_start(args, str);
logprint(PANIC, str, args);
va_end(args);
}
void fatal(char *str, ...)
{
va_list args;
va_start(args, str);
logprint(FATAL, str, args);
va_end(args);
}
void error(char *str, ...)
{
va_list args;
va_start(args, str);
logprint(ERROR, str, args);
va_end(args);
}
void warn(char *str, ...)
{
va_list args;
va_start(args, str);
logprint(WARN, str, args);
va_end(args);
}
void info(char *str, ...)
{
va_list args;
va_start(args, str);
logprint(INFO, str, args);
va_end(args);
}
void debug(char *str, ...)
{
va_list args;
va_start(args, str);
logprint(DEBUG, str, args);
va_end(args);
}
void trace(char *str, ...)
{
va_list args;
va_start(args, str);
logprint(TRACE, str, args);
va_end(args);
}
int main()
{
create_logger("logger.log", TRACE);
info("Je me lève.");
trace("Il y a un oiseau derrière la fenêtre.");
info("Je sors de ma chambre. Il fait %d degrés.", 18);
warn("Je trébuche.");
info("Je descends les escaliers");
info("Je suis dans la rue");
panic("Je meurs");
destroy_logger();
}