Dunst
Lightweight notification daemon
Loading...
Searching...
No Matches
log.c
Go to the documentation of this file.
1/* SPDX-License-Identifier: BSD-3-Clause */
8
9#include <glib.h>
10
11#include "log.h"
12#include "utils.h"
13
14// NOTE: Keep updated with the dunst manual
15static GLogLevelFlags log_level = G_LOG_LEVEL_MESSAGE;
16
17static enum log_mask log_mask = DUNST_LOG_AUTO;
18
19static const char *log_level_to_string(GLogLevelFlags level)
20{
21 switch (level) {
22 case G_LOG_LEVEL_ERROR: return "ERROR";
23 case G_LOG_LEVEL_CRITICAL: return "CRITICAL";
24 case G_LOG_LEVEL_WARNING: return "WARNING";
25 case G_LOG_LEVEL_MESSAGE: return "MESSAGE";
26 case G_LOG_LEVEL_INFO: return "INFO";
27 case G_LOG_LEVEL_DEBUG: return "DEBUG";
28 default: return "UNKNOWN";
29 }
30}
31
32void log_set_level_from_string(const char *level)
33{
34 ASSERT_OR_RET(level,);
35
36 if (STR_CASEQ(level, "critical"))
37 log_level = G_LOG_LEVEL_CRITICAL;
38 else if (STR_CASEQ(level, "crit"))
39 log_level = G_LOG_LEVEL_CRITICAL;
40 else if (STR_CASEQ(level, "warning"))
41 log_level = G_LOG_LEVEL_WARNING;
42 else if (STR_CASEQ(level, "warn"))
43 log_level = G_LOG_LEVEL_WARNING;
44 else if (STR_CASEQ(level, "message"))
45 log_level = G_LOG_LEVEL_MESSAGE;
46 else if (STR_CASEQ(level, "mesg"))
47 log_level = G_LOG_LEVEL_MESSAGE;
48 else if (STR_CASEQ(level, "info"))
49 log_level = G_LOG_LEVEL_INFO;
50 else if (STR_CASEQ(level, "debug"))
51 log_level = G_LOG_LEVEL_DEBUG;
52 else if (STR_CASEQ(level, "deb"))
53 log_level = G_LOG_LEVEL_DEBUG;
54 else
55 LOG_W("Unknown log level: '%s'", level);
56}
57
58void log_set_level(GLogLevelFlags level)
59{
60 log_level = level;
61}
62
72 const gchar *log_domain,
73 GLogLevelFlags message_level,
74 const gchar *message,
75 gpointer ignore)
76{
77 (void)log_domain;
78
79 GLogLevelFlags message_level_masked = message_level & G_LOG_LEVEL_MASK;
80
81 if (log_mask == DUNST_LOG_NONE ||
82 (log_mask == DUNST_LOG_AUTO && log_level < message_level_masked))
83 return;
84
85 const char *log_level_str =
86 log_level_to_string(message_level_masked);
87
88 /* Use stderr for warnings and higher */
89 if (message_level_masked <= G_LOG_LEVEL_WARNING)
90 g_printerr("%s: %s\n", log_level_str, message);
91 else
92 g_print("%s: %s\n", log_level_str, message);
93}
94
95void dunst_log_init(enum log_mask mask)
96{
97 log_mask = mask;
98 g_log_set_default_handler(dunst_log_handler, NULL);
99}
void log_set_level_from_string(const char *level)
Set the current loglevel to level
Definition log.c:32
static void dunst_log_handler(const gchar *log_domain, GLogLevelFlags message_level, const gchar *message, gpointer ignore)
Log handling function for GLib's logging wrapper.
Definition log.c:71
void dunst_log_init(enum log_mask mask)
Initialise log handling.
Definition log.c:95
void log_set_level(GLogLevelFlags level)
Set the current loglevel to level
Definition log.c:58
Logging subsystem and helpers.
String, time and other various helpers.
#define ASSERT_OR_RET(expr, val)
Assert that expr evaluates to true, if not return val.
Definition utils.h:42
#define STR_CASEQ(a, b)
Test if string a and b are the same case-insensitively.
Definition utils.h:32