arguments variables

This commit is contained in:
Valentin Moguérou 2024-04-15 18:39:37 +02:00
parent 706e4ef98f
commit bda435c105
4 changed files with 108 additions and 70 deletions

1
.gitignore vendored
View File

@ -53,3 +53,4 @@ Mkfile.old
dkms.conf dkms.conf
logger logger
*.log

157
logger.c
View File

@ -1,6 +1,8 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <time.h> #include <time.h>
#include <stdarg.h>
#include <string.h>
#include "logger.h" #include "logger.h"
@ -26,86 +28,117 @@ void destroy_logger(Logger logger) {
free(logger); free(logger);
} }
void panic(Logger logger, char *str) { void logprint(Logger logger, LogLevel level, char* str, va_list args)
if (PANIC >= logger->level) { {
clock_t t = clock() - logger->t0; clock_t t = clock();
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) { char label[6];
if (FATAL >= logger->level) { switch (level)
clock_t t = clock() - logger->t0; {
fprintf(stderr, "[FATAL][%f]: %s\n", (double)t / CLOCKS_PER_SEC, str); case (PANIC):
strcpy(label, "PANIC");
if (logger->logfile != NULL) break;
fprintf(logger->logfile, "[FATAL][%f]: %s\n", (double)t / CLOCKS_PER_SEC, str); 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) { FILE* stream = (level >= WARN) ? stderr : stdout;
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 (level < logger->level)
if (WARN >= logger->level) { return;
clock_t t = clock() - logger->t0;
fprintf(stderr, "[WARN][%f]: %s\n", (double)t / CLOCKS_PER_SEC, str); fprintf(stream, "[%s][%f]: ", label, (double)t / CLOCKS_PER_SEC);
vfprintf(stream, str, args);
if (logger->logfile != NULL) fprintf(stream, "\n");
fprintf(logger->logfile, "[WARN][%f]: %s\n", (double)t / CLOCKS_PER_SEC, str);
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) { void panic(Logger logger, char *str, ...)
if (INFO >= logger->level) { {
clock_t t = clock() - logger->t0; va_list args;
fprintf(stdout, "[INFO][%f]: %s\n", (double)t / CLOCKS_PER_SEC, str); va_start(args, str);
logprint(logger, PANIC, str, args);
if (logger->logfile != NULL) va_end(args);
fprintf(logger->logfile, "[INFO][%f]: %s\n", (double)t / CLOCKS_PER_SEC, str);
}
} }
void fatal(Logger logger, char *str, ...)
void debug(Logger logger, char *str) { {
if (DEBUG >= logger->level) { va_list args;
clock_t t = clock() - logger->t0; va_start(args, str);
fprintf(stdout, "[DEBUG][%f]: %s\n", (double)t / CLOCKS_PER_SEC, str); logprint(logger, FATAL, str, args);
va_end(args);
if (logger->logfile != NULL)
fprintf(logger->logfile, "[DEBUG][%f]: %s\n", (double)t / CLOCKS_PER_SEC, str);
}
} }
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) { void warn(Logger logger, char *str, ...)
if (TRACE >= logger->level) { {
clock_t t = clock() - logger->t0; va_list args;
fprintf(stdout, "[TRACE][%f]: %s\n", (double)t / CLOCKS_PER_SEC, str); va_start(args, str);
logprint(logger, WARN, str, args);
if (logger->logfile != NULL) va_end(args);
fprintf(logger->logfile, "[TRACE][%f]: %s\n", (double)t / CLOCKS_PER_SEC, str); }
}
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() 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."); warn(logger, "Ceci est un warn de test %f", 1.6*2.5);
panic(logger, "On m'a assassiné."); trace(logger, "Ceci est un trace de test %f", 1.6*2.5);
return 0; destroy_logger(logger);
} }

View File

@ -1,3 +1,6 @@
#ifndef LOGGER_H_INCLUDED
#define LOGGER_H_INCLUDED
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <time.h> #include <time.h>
@ -25,10 +28,12 @@ typedef struct Logger* Logger;
Logger create_logger(char *logpath, LogLevel level); Logger create_logger(char *logpath, LogLevel level);
void destroy_logger(Logger logger); void destroy_logger(Logger logger);
void panic(Logger logger, char *str); void panic(Logger logger, char *str, ...);
void fatal(Logger logger, char *str); void fatal(Logger logger, char *str, ...);
void error(Logger logger, char *str); void error(Logger logger, char *str, ...);
void warn(Logger logger, char *str); void warn(Logger logger, char *str, ...);
void info(Logger logger, char *str); void info(Logger logger, char *str, ...);
void debug(Logger logger, char *str); void debug(Logger logger, char *str, ...);
void trace(Logger logger, char *str); void trace(Logger logger, char *str, ...);
#endif

View File

@ -1 +0,0 @@
[PANIC][0.000098]: On m'a assassiné.