From 280ec456a434cc15e223426a7fe3bf72a31adfc3 Mon Sep 17 00:00:00 2001 From: Benedikt Heine Date: Fri, 15 Dec 2017 03:24:13 +0100 Subject: [PATCH] Allow to set the log level via options --- docs/dunst.pod | 6 ++++++ dunstrc | 9 +++++++++ src/dunst.c | 4 ++++ src/log.c | 40 ++++++++++++++++++++++++++++++++++++++++ src/log.h | 3 +++ src/settings.c | 7 +++++++ src/test | Bin 0 -> 8192 bytes 7 files changed, 69 insertions(+) create mode 100755 src/test diff --git a/docs/dunst.pod b/docs/dunst.pod index 0973fa8..d2c7a0b 100644 --- a/docs/dunst.pod +++ b/docs/dunst.pod @@ -444,6 +444,12 @@ WM_CLASS). There should be no need to modify this setting for regular use. Display a notification on startup. This is usually used for debugging and there shouldn't be any need to use this option. +=item B (values: 'crit', 'warn', 'mesg', 'info', 'debug' default 'mesg') + +Do not display log messages, which have lower precedence than specified +verbosity. This won't affect printing notifications on the terminal. Use +the '-print' option for this. + =item B (values: [true/false], default: false) Use the Xinerama extension instead of RandR for multi-monitor support. This diff --git a/dunstrc b/dunstrc index dbe7eab..0f4c4aa 100644 --- a/dunstrc +++ b/dunstrc @@ -198,6 +198,15 @@ # automatically after a crash. startup_notification = false + # Manage dunst's desire for talking + # Can be one of the following values: + # crit: Critical features. Dunst aborts + # warn: Only non-fatal warnings + # mesg: Important Messages + # info: all unimportant stuff + # debug: all less than unimportant stuff + verbosity = mesg + ### Legacy # Use the Xinerama extension instead of RandR for multi-monitor support. diff --git a/src/dunst.c b/src/dunst.c index 18e4536..53fb2fc 100644 --- a/src/dunst.c +++ b/src/dunst.c @@ -132,6 +132,10 @@ int dunst_main(int argc, char *argv[]) print_version(); } + char *verbosity = cmdline_get_string("-verbosity", NULL, "Minimum level for message"); + log_set_level_from_string(verbosity); + g_free(verbosity); + char *cmdline_config_path; cmdline_config_path = cmdline_get_string("-conf/-config", NULL, diff --git a/src/log.c b/src/log.c index a99b7fe..ad777f6 100644 --- a/src/log.c +++ b/src/log.c @@ -4,6 +4,8 @@ #include +static GLogLevelFlags log_level = G_LOG_LEVEL_WARNING; + static const char *log_level_to_string(GLogLevelFlags level) { switch (level) { @@ -17,6 +19,38 @@ static const char *log_level_to_string(GLogLevelFlags level) } } +void log_set_level_from_string(const char *level) +{ + if (!level) + return; + + if (g_ascii_strcasecmp(level, "critical") == 0) + log_level = G_LOG_LEVEL_CRITICAL; + else if (g_ascii_strcasecmp(level, "crit") == 0) + log_level = G_LOG_LEVEL_CRITICAL; + else if (g_ascii_strcasecmp(level, "warning") == 0) + log_level = G_LOG_LEVEL_WARNING; + else if (g_ascii_strcasecmp(level, "warn") == 0) + log_level = G_LOG_LEVEL_WARNING; + else if (g_ascii_strcasecmp(level, "message") == 0) + log_level = G_LOG_LEVEL_MESSAGE; + else if (g_ascii_strcasecmp(level, "mesg") == 0) + log_level = G_LOG_LEVEL_MESSAGE; + else if (g_ascii_strcasecmp(level, "info") == 0) + log_level = G_LOG_LEVEL_INFO; + else if (g_ascii_strcasecmp(level, "debug") == 0) + log_level = G_LOG_LEVEL_DEBUG; + else if (g_ascii_strcasecmp(level, "deb") == 0) + log_level = G_LOG_LEVEL_DEBUG; + else + LOG_W("Unknown log level: '%s'", level); +} + +void log_set_level(GLogLevelFlags level) +{ + log_level = level; +} + /* * Log handling function for GLib's logging wrapper * @@ -31,6 +65,12 @@ static void dunst_log_handler( if (testing) return; +/* if you want to have a debug build, you want to log anything, + * unconditionally, without specifying debug log level again */ +#ifndef DEBUG_BUILD + if (log_level < message_level) + return; +#endif const char *log_level_str = log_level_to_string(message_level & G_LOG_LEVEL_MASK); diff --git a/src/log.h b/src/log.h index 1bfc921..3ca6e9d 100644 --- a/src/log.h +++ b/src/log.h @@ -16,6 +16,9 @@ #define DIE(...) do { LOG_C(__VA_ARGS__); exit(EXIT_FAILURE); } while (0) +void log_set_level(GLogLevelFlags level); +void log_set_level_from_string(const char* level); + void dunst_log_init(bool testing); #endif diff --git a/src/settings.c b/src/settings.c index 8f20476..e8b685f 100644 --- a/src/settings.c +++ b/src/settings.c @@ -106,6 +106,13 @@ void load_settings(char *cmdline_config_path) "Using STATIC_CONFIG is deprecated behavior."); #endif + log_set_level_from_string(option_get_string( + "global", + "verbosity", "-verbosity", NULL, + "The verbosity to log (one of 'info', 'mesg', 'warn', 'crit')" + "The verbosity to log (one of 'crit', 'warn', 'mesg', 'info', 'debug')" + )); + settings.per_monitor_dpi = option_get_bool( "experimental", "per_monitor_dpi", NULL, false, diff --git a/src/test b/src/test new file mode 100755 index 0000000000000000000000000000000000000000..66605e6ba9443c5b4140b088d9a43ea8302e8bbf GIT binary patch literal 8192 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 S?pa>HM>@FeHcEBB{(k_8c>`(y literal 0 HcmV?d00001