void pa_log_set_ident(const char *p) { pa_xfree(log_ident); pa_xfree(log_ident_local); log_ident = pa_xstrdup(p); if (!(log_ident_local = pa_utf8_to_locale(log_ident))) log_ident_local = pa_xstrdup(log_ident); }
void pa_log_set_ident(const char *p) { pa_xfree(ident); if (!(ident = pa_utf8_to_locale(p))) ident = pa_ascii_filter(p); }
void pa_log_levelv_meta( pa_log_level_t level, const char*file, int line, const char *func, const char *format, va_list ap) { const char *e; char *text, *t, *n, *location; pa_assert(level < PA_LOG_LEVEL_MAX); pa_assert(format); if ((e = getenv(ENV_LOGLEVEL))) maximal_level = atoi(e); if (level > maximal_level) return; text = pa_vsprintf_malloc(format, ap); if (getenv(ENV_LOGMETA) && file && line > 0 && func) location = pa_sprintf_malloc("[%s:%i %s()] ", file, line, func); else if (file) location = pa_sprintf_malloc("%s: ", pa_path_get_filename(file)); else location = pa_xstrdup(""); if (!pa_utf8_valid(text)) pa_log_level(level, __FILE__": invalid UTF-8 string following below:"); for (t = text; t; t = n) { if ((n = strchr(t, '\n'))) { *n = 0; n++; } if (!*t) continue; switch (log_target) { case PA_LOG_STDERR: { const char *prefix = "", *suffix = ""; char *local_t; #ifndef OS_IS_WIN32 /* Yes indeed. Useless, but fun! */ if (isatty(STDERR_FILENO)) { if (level <= PA_LOG_ERROR) { prefix = "\x1B[1;31m"; suffix = "\x1B[0m"; } else if (level <= PA_LOG_WARN) { prefix = "\x1B[1m"; suffix = "\x1B[0m"; } } #endif local_t = pa_utf8_to_locale(t); if (!local_t) fprintf(stderr, "%c: %s%s%s%s\n", level_to_char[level], location, prefix, t, suffix); else { fprintf(stderr, "%c: %s%s%s%s\n", level_to_char[level], location, prefix, local_t, suffix); pa_xfree(local_t); } break; } #ifdef HAVE_SYSLOG_H case PA_LOG_SYSLOG: { char *local_t; openlog(log_ident_local ? log_ident_local : "???", LOG_PID, LOG_USER); local_t = pa_utf8_to_locale(t); if (!local_t) syslog(level_to_syslog[level], "%s%s", location, t); else { syslog(level_to_syslog[level], "%s%s", location, local_t); pa_xfree(local_t); } closelog(); break; } #endif case PA_LOG_USER: { char *x; x = pa_sprintf_malloc("%s%s", location, t); user_log_func(level, x); pa_xfree(x); break; } case PA_LOG_NULL: default: break; } } pa_xfree(text); pa_xfree(location); }