diff --git a/.gitignore b/.gitignore index 2b2aa7e..b795f7e 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,4 @@ Mkfile.old dkms.conf logger +*.log diff --git a/logger.c b/logger.c index 12fd534..c3d409b 100644 --- a/logger.c +++ b/logger.c @@ -1,6 +1,8 @@ #include #include #include +#include +#include #include "logger.h" @@ -26,86 +28,117 @@ void destroy_logger(Logger logger) { free(logger); } -void panic(Logger logger, char *str) { - if (PANIC >= logger->level) { - clock_t t = clock() - logger->t0; - fprintf(stderr, "[PANIC][%f]: %s\n", (double)t / CLOCKS_PER_SEC, str); - - if (logger->logfile != NULL) - fprintf(logger->logfile, "[PANIC][%f]: %s\n", (double)t / CLOCKS_PER_SEC, str); - } -} +void logprint(Logger logger, LogLevel level, char* str, va_list args) +{ + clock_t t = clock(); -void fatal(Logger logger, char *str) { - if (FATAL >= logger->level) { - clock_t t = clock() - logger->t0; - fprintf(stderr, "[FATAL][%f]: %s\n", (double)t / CLOCKS_PER_SEC, str); - - if (logger->logfile != NULL) - fprintf(logger->logfile, "[FATAL][%f]: %s\n", (double)t / CLOCKS_PER_SEC, str); + 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; } -} -void error(Logger logger, char *str) { - if (ERROR >= logger->level) { - clock_t t = clock() - logger->t0; - fprintf(stderr, "[ERROR][%f]: %s\n", (double)t / CLOCKS_PER_SEC, str); - - if (logger->logfile != NULL) - fprintf(logger->logfile, "[ERROR][%f]: %s\n", (double)t / CLOCKS_PER_SEC, str); - } -} + FILE* stream = (level >= WARN) ? stderr : stdout; -void warn(Logger logger, char *str) { - if (WARN >= logger->level) { - clock_t t = clock() - logger->t0; - fprintf(stderr, "[WARN][%f]: %s\n", (double)t / CLOCKS_PER_SEC, str); - - if (logger->logfile != NULL) - fprintf(logger->logfile, "[WARN][%f]: %s\n", (double)t / CLOCKS_PER_SEC, str); + 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 info(Logger logger, char *str) { - if (INFO >= logger->level) { - clock_t t = clock() - logger->t0; - fprintf(stdout, "[INFO][%f]: %s\n", (double)t / CLOCKS_PER_SEC, str); - - if (logger->logfile != NULL) - fprintf(logger->logfile, "[INFO][%f]: %s\n", (double)t / CLOCKS_PER_SEC, str); - } +void panic(Logger logger, char *str, ...) +{ + va_list args; + va_start(args, str); + logprint(logger, PANIC, str, args); + va_end(args); } - -void debug(Logger logger, char *str) { - if (DEBUG >= logger->level) { - clock_t t = clock() - logger->t0; - fprintf(stdout, "[DEBUG][%f]: %s\n", (double)t / CLOCKS_PER_SEC, str); - - if (logger->logfile != NULL) - fprintf(logger->logfile, "[DEBUG][%f]: %s\n", (double)t / CLOCKS_PER_SEC, str); - } +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 trace(Logger logger, char *str) { - if (TRACE >= logger->level) { - clock_t t = clock() - logger->t0; - fprintf(stdout, "[TRACE][%f]: %s\n", (double)t / CLOCKS_PER_SEC, str); - - if (logger->logfile != NULL) - fprintf(logger->logfile, "[TRACE][%f]: %s\n", (double)t / CLOCKS_PER_SEC, str); - } +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", INFO); + Logger logger = create_logger("logger.log", WARN); - trace(logger, "Le vent fait un peu de bruit."); - panic(logger, "On m'a assassiné."); + 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); - return 0; + destroy_logger(logger); } diff --git a/logger.h b/logger.h index 76b60b6..80c956a 100644 --- a/logger.h +++ b/logger.h @@ -1,3 +1,6 @@ +#ifndef LOGGER_H_INCLUDED +#define LOGGER_H_INCLUDED + #include #include #include @@ -25,10 +28,12 @@ typedef struct Logger* Logger; Logger create_logger(char *logpath, LogLevel level); void destroy_logger(Logger logger); -void panic(Logger logger, char *str); -void fatal(Logger logger, char *str); -void error(Logger logger, char *str); -void warn(Logger logger, char *str); -void info(Logger logger, char *str); -void debug(Logger logger, char *str); -void trace(Logger logger, char *str); +void panic(Logger logger, char *str, ...); +void fatal(Logger logger, char *str, ...); +void error(Logger logger, char *str, ...); +void warn(Logger logger, char *str, ...); +void info(Logger logger, char *str, ...); +void debug(Logger logger, char *str, ...); +void trace(Logger logger, char *str, ...); + +#endif diff --git a/logger.log b/logger.log deleted file mode 100644 index e5363fe..0000000 --- a/logger.log +++ /dev/null @@ -1 +0,0 @@ -[PANIC][0.000098]: On m'a assassiné.