aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/log.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/log.c b/src/log.c
index feae78bfc..f0c8a9cad 100644
--- a/src/log.c
+++ b/src/log.c
@@ -40,6 +40,8 @@
static unsigned int log_threshold = G_LOG_LEVEL_INFO;
+static const char *log_charset;
+
static bool stdout_mode = true;
static int out_fd = -1;
static int err_fd = -1;
@@ -71,16 +73,27 @@ mpd_log_func(G_GNUC_UNUSED const gchar *log_domain,
{
FILE *file = log_level <= G_LOG_LEVEL_WARNING
? stderr : stdout;
+ char *converted;
+
+ converted = g_convert_with_fallback(message, -1,
+ log_charset, "utf-8",
+ NULL, NULL, NULL, NULL);
+ if (converted != NULL)
+ message = converted;
fprintf(file, "%s%s",
stdout_mode ? "" : log_date(),
message);
+
+ g_free(converted);
}
void initLog(bool verbose)
{
ConfigParam *param;
+ g_get_charset(&log_charset);
+
g_log_set_default_handler(mpd_log_func, NULL);
/* unbuffer stdout, stderr is unbuffered by default, leave it */
@@ -136,6 +149,7 @@ void setup_log_output(bool use_stdout)
if (!use_stdout) {
redirect_logs();
stdout_mode = false;
+ log_charset = NULL;
}
}