145 lines
2.9 KiB
C
145 lines
2.9 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <time.h>
|
|
#include <stdarg.h>
|
|
#include <string.h>
|
|
|
|
#include "logger.h"
|
|
|
|
Logger create_logger(char* logpath, LogLevel level) {
|
|
Logger logger = malloc(sizeof(*logger));
|
|
|
|
logger->t0 = clock();
|
|
logger->level = level;
|
|
|
|
if (logpath[0] != '\0')
|
|
{
|
|
logger->logfile = fopen(logpath, "w");
|
|
}
|
|
else
|
|
logger->logfile = NULL;
|
|
|
|
return logger;
|
|
}
|
|
|
|
void destroy_logger(Logger logger) {
|
|
if (logger->logfile != NULL)
|
|
fclose(logger->logfile);
|
|
free(logger);
|
|
}
|
|
|
|
void logprint(Logger logger, 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(Logger logger, char *str, ...)
|
|
{
|
|
va_list args;
|
|
va_start(args, str);
|
|
logprint(logger, PANIC, str, args);
|
|
va_end(args);
|
|
}
|
|
|
|
void fatal(Logger logger, char *str, ...)
|
|
{
|
|
va_list args;
|
|
va_start(args, str);
|
|
logprint(logger, FATAL, str, args);
|
|
va_end(args);
|
|
}
|
|
|
|
void error(Logger logger, char *str, ...)
|
|
{
|
|
va_list args;
|
|
va_start(args, str);
|
|
logprint(logger, ERROR, str, args);
|
|
va_end(args);
|
|
}
|
|
|
|
void warn(Logger logger, char *str, ...)
|
|
{
|
|
va_list args;
|
|
va_start(args, str);
|
|
logprint(logger, WARN, str, args);
|
|
va_end(args);
|
|
}
|
|
|
|
void info(Logger logger, char *str, ...)
|
|
{
|
|
va_list args;
|
|
va_start(args, str);
|
|
logprint(logger, INFO, str, args);
|
|
va_end(args);
|
|
}
|
|
|
|
void debug(Logger logger, char *str, ...)
|
|
{
|
|
va_list args;
|
|
va_start(args, str);
|
|
logprint(logger, DEBUG, str, args);
|
|
va_end(args);
|
|
}
|
|
|
|
void trace(Logger logger, char *str, ...)
|
|
{
|
|
va_list args;
|
|
va_start(args, str);
|
|
logprint(logger, TRACE, str, args);
|
|
va_end(args);
|
|
}
|
|
|
|
|
|
int main()
|
|
{
|
|
Logger logger = create_logger("logger.log", WARN);
|
|
|
|
warn(logger, "Ceci est un warn de test %f", 1.6*2.5);
|
|
trace(logger, "Ceci est un trace de test %f", 1.6*2.5);
|
|
|
|
destroy_logger(logger);
|
|
}
|