aboutsummaryrefslogtreecommitdiff
path: root/qga
diff options
context:
space:
mode:
authorAndrey Drobyshev <andrey.drobyshev@virtuozzo.com>2022-11-29 19:38:09 +0200
committerKonstantin Kostiuk <kkostiuk@redhat.com>2022-12-20 15:54:42 +0200
commit8e86851bd6b9b67fb5f6896cb85ff20c7d9bbbaa (patch)
tree0cb7ef07f8eb643323f2cda6fb7b24a32f2d6e6a /qga
parentf9f0e6173e1d570847930abfe2b4560c7b6a964a (diff)
qga: map GLib log levels to system levels
This patch translates GLib-specific log levels to system ones, so that they may be used by both *nix syslog() (as a "priority" argument) and Windows ReportEvent() (as a "wType" argument). Currently the only codepath to write to "syslog" domain is slog() function. However, this patch allows the interface to be extended. Note that since slog() is using G_LOG_LEVEL_INFO level, its behaviour doesn't change. Originally-by: Yuri Pudgorodskiy <yur@virtuozzo.com> Signed-off-by: Andrey Drobyshev <andrey.drobyshev@virtuozzo.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Reviewed-by: Konstantin Kostiuk <kkostiuk@redhat.com> Tested-by: Konstantin Kostiuk <kkostiuk@redhat.com> Signed-off-by: Konstantin Kostiuk <kkostiuk@redhat.com>
Diffstat (limited to 'qga')
-rw-r--r--qga/main.c36
1 files changed, 34 insertions, 2 deletions
diff --git a/qga/main.c b/qga/main.c
index 1463a1c170..85b7d6ced5 100644
--- a/qga/main.c
+++ b/qga/main.c
@@ -314,6 +314,38 @@ void ga_enable_logging(GAState *s)
s->logging_enabled = true;
}
+static int glib_log_level_to_system(int level)
+{
+ switch (level) {
+#ifndef _WIN32
+ case G_LOG_LEVEL_ERROR:
+ return LOG_ERR;
+ case G_LOG_LEVEL_CRITICAL:
+ return LOG_CRIT;
+ case G_LOG_LEVEL_WARNING:
+ return LOG_WARNING;
+ case G_LOG_LEVEL_MESSAGE:
+ return LOG_NOTICE;
+ case G_LOG_LEVEL_DEBUG:
+ return LOG_DEBUG;
+ case G_LOG_LEVEL_INFO:
+ default:
+ return LOG_INFO;
+#else
+ case G_LOG_LEVEL_ERROR:
+ case G_LOG_LEVEL_CRITICAL:
+ return EVENTLOG_ERROR_TYPE;
+ case G_LOG_LEVEL_WARNING:
+ return EVENTLOG_WARNING_TYPE;
+ case G_LOG_LEVEL_MESSAGE:
+ case G_LOG_LEVEL_INFO:
+ case G_LOG_LEVEL_DEBUG:
+ default:
+ return EVENTLOG_INFORMATION_TYPE;
+#endif
+ }
+}
+
static void ga_log(const gchar *domain, GLogLevelFlags level,
const gchar *msg, gpointer opaque)
{
@@ -327,9 +359,9 @@ static void ga_log(const gchar *domain, GLogLevelFlags level,
level &= G_LOG_LEVEL_MASK;
if (g_strcmp0(domain, "syslog") == 0) {
#ifndef _WIN32
- syslog(LOG_INFO, "%s: %s", level_str, msg);
+ syslog(glib_log_level_to_system(level), "%s: %s", level_str, msg);
#else
- ReportEvent(s->event_log, EVENTLOG_INFORMATION_TYPE,
+ ReportEvent(s->event_log, glib_log_level_to_system(level),
0, 1, NULL, 1, 0, &msg, NULL);
#endif
} else if (level & s->log_level) {