ftech
/Logger
/amendments
/2
Added Info log level
Francois Techene made amendment 2 10 days ago
--- logger-test.c Mon Apr 7 11:26:12 2025
+++ logger-test.c Tue Apr 8 09:47:06 2025
@@ -29,7 +29,7 @@ main(void)
printf("+-----------------------------------+\n");
printf("| Logger Test |\n");
- printf("+-----------------------------------+\n\n");
+ printf("+-----------------------------------+\n");
// You can use a file in a shared folder on the network
// and use "tail -f" on the remote machine the see the logs
@@ -43,53 +43,68 @@ main(void)
init_logger(DEBUG_LEVEL, FILE_OUT, "test.log");
- printf("\n-- Logging to file: %s\n", logger.file_path);
+ printf("-- Logging to file: %s\n", logger.file_path);
logger.debug("This is a debug message to %s", logger.file_path);
+ logger.info("This is an info message to %s ", logger.file_path);
logger.warn("This is a warning to %s", logger.file_path);
logger.error("This is an error to %s", logger.file_path);
init_logger(DEBUG_LEVEL, CONSOLE_OUT, NULL);
- printf("\n-- Logging to the console:\n\n");
+ printf("-- Logging to the console:\n");
logger.debug("This is a debug message with number %d ", 1);
- logger.warn("This is a warning with number %d ", 2);
- logger.error("This is an error with number %d ", 3);
+ logger.info("This is an info message with number %d ", 2);
+ logger.warn("This is a warning with number %d ", 3);
+ logger.error("This is an error with number %d ", 4);
init_logger(NONE_LEVEL, CONSOLE_OUT, NULL);
- printf("\n-- NONE_LEVEL: Must not show any log: \n\n");
+ printf("\n-- NONE_LEVEL: Must not show any log: \n");
logger.debug("This debug log should not be visible");
+ logger.info("This info log should not be visible");
logger.warn("This warning log should not be visible");
logger.error("This error log should not be visible");
init_logger(ERROR_LEVEL, CONSOLE_OUT, NULL);
- printf("\n-- ERROR_LEVEL: Must show only errors: \n\n");
- logger.debug("This debug log should not be visible");
- logger.warn("This warning log should not be visible");
+ printf("-- ERROR_LEVEL: Must show only errors: \n");
+ logger.debug("This debug log should not be visible !!!");
+ logger.info("This info log should not be visible !!!");
+ logger.warn("This warning log should not be visible !!!");
logger.error("This error log should be visible");
init_logger(WARNING_LEVEL, CONSOLE_OUT, NULL);
- printf("\n-- WARNING_LEVEL: Must show errors and warnings: \n\n");
- logger.debug("This debug log should not be visible");
+ printf("\n-- WARNING_LEVEL: Must show warnings and errors: \n");
+ logger.debug("This debug log should not be visible !!!");
+ logger.info("This info log should not be visible !!!");
logger.warn("This warning log should be visible");
logger.error("This error log should be visible");
+ init_logger(INFO_LEVEL, CONSOLE_OUT, NULL);
+
+ printf("\n-- INFO_LEVEL: Must show info, warnings and errors: \n");
+ logger.debug("This debug log should not be visible !!!");
+ logger.info("This info log should be visible");
+ logger.warn("This warning log should be visible");
+ logger.error("This error log should be visible");
+
+
init_logger(DEBUG_LEVEL, NONE_OUT, NULL);
- printf("\n-- Logging to none output: \n\n");
- logger.debug("This debug log should not be visible");
- logger.warn("This warning log should not be visible");
- logger.error("This error log should not be visible");
+ printf("\n-- Logging to none output: \n");
+ logger.debug("This debug log should not be visible !!!");
+ logger.info("This info log should not be visible !!!");
+ logger.warn("This warning log should not be visible !!!");
+ logger.error("This error log should not be visible !!!");
- printf("\nDone!\n");
+ printf("Done!");
return 1;
--- logger.c Mon Apr 7 11:24:55 2025
+++ logger.c Tue Apr 8 09:29:25 2025
@@ -32,6 +32,7 @@ init_logger(LogLevel level,
char* file_path)
{
logger.debug = log_debug;
+ logger.info = log_info;
logger.warn = log_warn;
logger.error = log_error;
@@ -119,6 +120,23 @@ log_debug(char* format, ...)
va_end(ap);
logger.log("DEBUG: %s", log);
+}
+
+void
+log_info(char* format, ...)
+{
+ va_list ap;
+ char log[256] = "";
+
+ if (logger.log_level < INFO_LEVEL) {
+ return;
+ }
+
+ va_start(ap, format);
+ vsprintf(log, format, ap);
+ va_end(ap);
+
+ logger.log("INFO: %s", log);
}
void
--- logger.h Mon Apr 7 11:25:44 2025
+++ logger.h Tue Apr 8 09:30:11 2025
@@ -25,6 +25,7 @@ typedef enum {
NONE_LEVEL = 0,
ERROR_LEVEL,
WARNING_LEVEL,
+ INFO_LEVEL,
DEBUG_LEVEL
} LogLevel;
@@ -41,6 +42,7 @@ typedef struct _Logger {
void (*log) (char* format, ...);
void (*debug) (char* format, ...);
+ void (*info) (char* format, ...);
void (*warn) (char* format, ...);
void (*error) (char* format, ...);
@@ -58,6 +60,7 @@ void init_logger(LogLevel level,
char* file_path);
void log_debug(char* format, ...);
+void log_info(char* format, ...);
void log_warn(char* format, ...);
void log_error(char* format, ...);
--- README Mon Apr 7 12:03:00 2025
+++ README Tue Apr 8 09:49:59 2025
@@ -39,14 +39,15 @@ Note that the log file is not created. It needs to exi
Log output methods are as follow:
NONE_OUT = 0,
- CONSOLE_OUT = 1,
+ CONSOLE_OUT = 1,
FILE_OUT = 2,
Log levels are as follow:
- NONE_LEVEL = 0,
+ NONE_LEVEL = 0,
ERROR_LEVEL = 1,
WARNING_LEVEL = 2,
- DEBUG_LEVEL = 3,
+ INFO_LEVEL = 3,
+ DEBUG_LEVEL = 4,
init_logger() initializes the global variable `logger`.
@@ -64,11 +65,12 @@ You can format your log message with variables:
char* what = "students";
logger.log("There are %d %s", count, what);
-Will output: "There are 10 students".
+--> Will output: "There are 10 students".
You can also use the following methods to differentiate debug, warning and error messages from your log output.
-
+
logger.debug(char* format, ...);
+ logger.info(char* format, ...);
logger.warn(char* format, ...);
logger.error(char* format, ...);
--- test.log Mon Apr 7 11:26:35 2025
+++ test.log Tue Apr 8 09:47:18 2025
@@ -1,3 +1,4 @@
DEBUG: This is a debug message to test.log
+INFO: This is an info message to test.log
WARNING: This is a warning to test.log
ERROR: This is an error to test.log