#include #include #include #include #include #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); }