diff --git a/.gitignore b/.gitignore index cd531cf..2b2aa7e 100644 --- a/.gitignore +++ b/.gitignore @@ -52,3 +52,4 @@ Module.symvers Mkfile.old dkms.conf +logger diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..ea0acb7 --- /dev/null +++ b/Makefile @@ -0,0 +1,10 @@ +CC=gcc +FLAGS=-Wall -Wextra -Wpedantic -g + +logger: logger.c + $(CC) $(FLAGS) -o $@ $^ + +.PHONY: clean + +clean: logger + rm logger diff --git a/logger.c b/logger.c new file mode 100644 index 0000000..12fd534 --- /dev/null +++ b/logger.c @@ -0,0 +1,111 @@ +#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 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 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); + } +} + +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); + } +} + +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); + } +} + + +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 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 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); + } +} + + +int main() +{ + Logger logger = create_logger("logger.log", INFO); + + trace(logger, "Le vent fait un peu de bruit."); + panic(logger, "On m'a assassiné."); + + return 0; +} diff --git a/logger.h b/logger.h new file mode 100644 index 0000000..76b60b6 --- /dev/null +++ b/logger.h @@ -0,0 +1,34 @@ +#include +#include +#include + + +enum LogLevel { + PANIC=6, + FATAL=5, + ERROR=4, + WARN=3, + INFO=2, + DEBUG=1, + TRACE=0 +}; +typedef enum LogLevel LogLevel; + +struct Logger { + clock_t t0; + LogLevel level; + FILE* logfile; +}; +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); diff --git a/logger.log b/logger.log new file mode 100644 index 0000000..e5363fe --- /dev/null +++ b/logger.log @@ -0,0 +1 @@ +[PANIC][0.000098]: On m'a assassiné.