mirror of
https://github.com/qemu/qemu.git
synced 2024-11-24 03:13:44 +08:00
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>
This commit is contained in:
parent
f9f0e6173e
commit
8e86851bd6
36
qga/main.c
36
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) {
|
||||
|
Loading…
Reference in New Issue
Block a user