From ae63fef993c2b3ba19f89cc7efe01cbb04e7cf3e Mon Sep 17 00:00:00 2001
From: Kubat <mael.martin31@gmail.com>
Date: Wed, 1 Mar 2023 19:38:36 +0100
Subject: [PATCH] LOG: Add a flag in the config to toggle verbose log level
 indications

---
 inc/lektor/common.h            |  1 +
 inc/lektor/internal/config.def |  9 +++++----
 src/base/common.c              | 26 +++++++++++++++++++-------
 src/main/lkt.c                 |  1 +
 src/main/server.c              |  4 ++++
 5 files changed, 30 insertions(+), 11 deletions(-)

diff --git a/inc/lektor/common.h b/inc/lektor/common.h
index 5fa57233..57a21ea1 100644
--- a/inc/lektor/common.h
+++ b/inc/lektor/common.h
@@ -137,6 +137,7 @@ typedef enum {
 } LOG_LEVEL;
 struct lkt_logfile;
 
+void lkt_set_log_level_verbose(bool);
 void lkt_set_log_level(LOG_LEVEL);
 void lkt_set_log_logfile(struct lkt_logfile *);
 LOG_LEVEL lkt_get_log_level(void);
diff --git a/inc/lektor/internal/config.def b/inc/lektor/internal/config.def
index 40a9e847..aaab5da7 100644
--- a/inc/lektor/internal/config.def
+++ b/inc/lektor/internal/config.def
@@ -18,10 +18,11 @@ comment("The 'log/level' will override the 'log' with no section")
 comment("The log files will be present in the 'log/folder', at most 'file_count'.")
 comment("Every file will be rotated when the current file has reached the maximum")
 comment("number of lines.")
-value_opt("level",      "INFO")
-value_opt("folder",     "/home/kara/logs")
-value_opt("file_count", "10")
-value_opt("line_count", "1000")
+value_opt("level",       "INFO")
+value_opt("lvl_verbose", "1")
+value_opt("folder",      "/home/kara/logs")
+value_opt("file_count",  "10")
+value_opt("line_count",  "1000")
 
 /* SERVER */
 section("server")
diff --git a/src/base/common.c b/src/base/common.c
index 3a89b3fc..d77da87e 100644
--- a/src/base/common.c
+++ b/src/base/common.c
@@ -40,8 +40,15 @@ __set_assert(void)
 
 /* Log functions */
 
-static LOG_LEVEL ___log_level = ___LAST_UNUSED_LOG_LEVEL; /* All by default */
-extern struct lkt_logfile *___log_logfile;                /* Use the logfile globaly */
+static bool ___log_level_verbose = false; /* Set whether the log level is verbose or contracted */
+static LOG_LEVEL ___log_level    = ___LAST_UNUSED_LOG_LEVEL; /* All by default */
+extern struct lkt_logfile *___log_logfile;                   /* Use the logfile globaly */
+
+void
+lkt_set_log_level_verbose(bool flag)
+{
+    ___log_level_verbose = flag;
+}
 
 void
 lkt_set_log_level(LOG_LEVEL lvl)
@@ -90,12 +97,17 @@ ___lkt_log(LOG_LEVEL level, const char *section, const char *func, const char *f
     if (level > ___log_level)
         return;
 
-    char c_level = level == LOG_LEVEL_ERROR  ? '!'
-                   : level == LOG_LEVEL_WARN ? '*'
-                   : level == LOG_LEVEL_INFO ? '.'
-                                             : ' ';
+    const char *const c_level = (level == LOG_LEVEL_ERROR) && ___log_level_verbose      ? "ERROR"
+                                : (level == LOG_LEVEL_WARN) && ___log_level_verbose     ? "WARN "
+                                : (level == LOG_LEVEL_INFO) && ___log_level_verbose     ? "INFO "
+                                : (level == LOG_LEVEL_DEBUG) && ___log_level_verbose    ? "DEBUG"
+                                : (level == LOG_LEVEL_ERROR) && (!___log_level_verbose) ? "!"
+                                : (level == LOG_LEVEL_WARN) && (!___log_level_verbose)  ? "*"
+                                : (level == LOG_LEVEL_INFO) && (!___log_level_verbose)  ? "."
+                                : (level == LOG_LEVEL_DEBUG) && (!___log_level_verbose) ? " "
+                                                                                        : " ";
     ssize_t count =
-        safe_snprintf(line, LKT_MESSAGE_MAX, " %c [%02d:%02d:%02d] %-10s %s(%s+%ld): %s\n", c_level,
+        safe_snprintf(line, LKT_MESSAGE_MAX, " %s [%02d:%02d:%02d] %-10s %s(%s+%ld): %s\n", c_level,
                       hour, min, sec, section, func, file, line_number, format);
     /* Check for overflow */
     if (count >= LKT_MESSAGE_MAX - 1) {
diff --git a/src/main/lkt.c b/src/main/lkt.c
index af5ef3f7..ba8a273a 100644
--- a/src/main/lkt.c
+++ b/src/main/lkt.c
@@ -1384,6 +1384,7 @@ lkt_logfile_write(UNUSED struct lkt_logfile *logfile, UNUSED const char *line)
 int
 main(int argc, const char **argv)
 {
+    lkt_set_log_level_verbose(true);
     lkt_segv_quiet();
     lkt_install_segv_handler();
     lkt_set_log_level(LOG_LEVEL_INFO);
diff --git a/src/main/server.c b/src/main/server.c
index 7d9225c1..80ffc083 100644
--- a/src/main/server.c
+++ b/src/main/server.c
@@ -55,6 +55,7 @@ main(int argc, char *argv[])
 
     int autoclear;
     int opt;
+    int log_lvl_verbose;
     int check_exclusive = 1;
     int dump_and_abort  = 0;
     char *conf_file     = LKT_ALLOC_ARRAY(char, PATH_MAX);
@@ -105,11 +106,14 @@ main(int argc, char *argv[])
     lkt_set_log_logfile(logfile);
 
     /* Read the configuration. We already know that the config is valid */
+    database_config_get_int(srv.db, "log", "lvl_verbose", &log_lvl_verbose);
     database_config_get_int(srv.db, "player", "autoclear", &autoclear);
     database_config_get_text(srv.db, "database", "kara_dir", kara_dir, PATH_MAX);
     database_config_get_text(srv.db, "server", "host", srv.host, HOST_NAME_MAX);
     database_config_get_text(srv.db, "server", "port", srv.port, 5);
 
+    lkt_set_log_level_verbose((bool)log_lvl_verbose);
+
     /* Quick check with an explicit error message, to remide the users to
      * create the kara folder */
     FAIL_IF(access(kara_dir, R_OK | W_OK), "No access in read / write for folder %s", kara_dir);
-- 
GitLab