From 78e262b448e034e96aa75193a76d36cd0062daf7 Mon Sep 17 00:00:00 2001 From: sanine Date: Fri, 24 Sep 2021 22:45:39 -0500 Subject: add getters and setters for log level/file --- src/logging/logging.c | 37 +++++++++++++++++++++++++++++++++---- src/logging/logging.h | 26 +++++++++++++++----------- src/test/logging/logging_tests.c | 25 +++++++++++++++++-------- 3 files changed, 65 insertions(+), 23 deletions(-) diff --git a/src/logging/logging.c b/src/logging/logging.c index 77c648c..82895d4 100644 --- a/src/logging/logging.c +++ b/src/logging/logging.c @@ -37,13 +37,42 @@ const char * honey_log_level_str() } -void honey_debug(const char *fmt, ...) +void honey_log_set_level(enum honey_log_level_t level) { - if (honey_log_info.log_level >= DEBUG) { + honey_log_info.log_level = level; +} + + +enum honey_log_level_t honey_log_get_level() +{ + return honey_log_info.log_level; +} + + +void honey_log_set_file(FILE* file) +{ + honey_log_info.log_file = file; +} + + +FILE * honey_log_get_file() +{ + return honey_log_info.log_file; +} + + +void honey_log(enum honey_log_level_t required_level, + const char *prefix, + const char *fmt, ...) +{ + if (honey_log_info.log_file == NULL) + return; + + if (honey_log_info.log_level >= required_level) { va_list args; va_start(args, fmt); - fprintf(honey_log_info.debug_out, "[DEBUG] "); - vfprintf(honey_log_info.debug_out, fmt, args); + fprintf(honey_log_info.log_file, prefix); + vfprintf(honey_log_info.log_file, fmt, args); va_end(args); } } diff --git a/src/logging/logging.h b/src/logging/logging.h index 69ea88e..6589533 100644 --- a/src/logging/logging.h +++ b/src/logging/logging.h @@ -3,24 +3,28 @@ #include +enum honey_log_level_t + { FATAL, ERROR, WARN, INFO, DEBUG }; struct honey_log_info_t { - enum { FATAL, ERROR, WARN, INFO, DEBUG } log_level; - FILE *debug_out; - FILE *info_out; - FILE *warn_out; - FILE *error_out; - FILE *fatal_out; + enum honey_log_level_t log_level; + FILE *log_file; }; extern struct honey_log_info_t honey_log_info; const char * honey_log_level_str(); -void honey_debug(const char *fmt, ...); -void honey_info(const char *fmt, ...); -void honey_warn(const char *fmt, ...); -void honey_error(const char *fmt, ...); -void honey_fatal(const char *fmt, ...); +void honey_log_set_level(enum honey_log_level_t level); +enum honey_log_level_t honey_log_get_level(); + +void honey_log_set_file(FILE *file); +FILE * honey_log_get_file(); + +void honey_log(enum honey_log_level_t required_level, + const char *prefix, + const char *fmt, ...); + +#define honey_debug(...) honey_log(DEBUG, "[DEBUG] ", __VA_ARGS__) #endif diff --git a/src/test/logging/logging_tests.c b/src/test/logging/logging_tests.c index e0aa5ef..b2dacf3 100644 --- a/src/test/logging/logging_tests.c +++ b/src/test/logging/logging_tests.c @@ -27,19 +27,24 @@ void honey_logging_tests() mu_test test_log_get_level() { - honey_log_info.log_level = DEBUG; + honey_log_set_level(DEBUG); + mu_assert_equal(DEBUG, honey_log_get_level()); mu_assert_streq("DEBUG", honey_log_level_str()); - honey_log_info.log_level = INFO; + honey_log_set_level(INFO); + mu_assert_equal(INFO, honey_log_get_level()); mu_assert_streq("INFO", honey_log_level_str()); - honey_log_info.log_level = WARN; + honey_log_set_level(WARN); + mu_assert_equal(WARN, honey_log_get_level()); mu_assert_streq("WARN", honey_log_level_str()); - honey_log_info.log_level = ERROR; + honey_log_set_level(ERROR); + mu_assert_equal(ERROR, honey_log_get_level()); mu_assert_streq("ERROR", honey_log_level_str()); - honey_log_info.log_level = FATAL; + honey_log_set_level(FATAL); + mu_assert_equal(FATAL, honey_log_get_level()); mu_assert_streq("FATAL", honey_log_level_str()); return 0; @@ -55,14 +60,18 @@ mu_test test_log_debug() stream = open_memstream(&buffer, &len); mu_assert_unequal(stream, NULL); - honey_log_info.debug_out = stream; - honey_log_info.log_level = FATAL; + honey_log_set_file(stream); + mu_assert_equal(honey_log_get_file(), stream); + + honey_log_set_level(FATAL); + mu_assert_equal(honey_log_get_level(), FATAL); honey_debug("hello, %s!", "world"); fflush(stream); mu_assert_streq(buffer, ""); - honey_log_info.log_level = DEBUG; + honey_log_set_level(DEBUG); + mu_assert_equal(honey_log_get_level(), DEBUG); honey_debug("hello, %s!", "world"); fclose(stream); mu_assert_streq(buffer, "[DEBUG] hello, world!"); -- cgit v1.2.1