#include #include #include #include #include #include "logger.h" void create_logger(char* logpath, LogLevel level) { 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(); }