X-Git-Url: https://code.delx.au/pulseaudio/blobdiff_plain/9416cdf63adc1d37b946eef025cbf506398426a2..8534149fbe87c63a5af85f5610c0f62b45500d90:/src/pulsecore/log.c diff --git a/src/pulsecore/log.c b/src/pulsecore/log.c index 60ea9c59..7ba41ee9 100644 --- a/src/pulsecore/log.c +++ b/src/pulsecore/log.c @@ -38,6 +38,7 @@ #include #endif +#include #include #include #include @@ -45,7 +46,7 @@ #include #include -#include +#include #include #include @@ -60,6 +61,7 @@ #define ENV_LOG_PRINT_LEVEL "PULSE_LOG_LEVEL" #define ENV_LOG_BACKTRACE "PULSE_LOG_BACKTRACE" #define ENV_LOG_BACKTRACE_SKIP "PULSE_LOG_BACKTRACE_SKIP" +#define ENV_LOG_NO_RATELIMIT "PULSE_LOG_NO_RATE_LIMIT" static char *ident = NULL; /* in local charset format */ static pa_log_target_t target = PA_LOG_STDERR, target_override; @@ -67,6 +69,7 @@ static pa_bool_t target_override_set = FALSE; static pa_log_level_t maximum_level = PA_LOG_ERROR, maximum_level_override = PA_LOG_ERROR; static unsigned show_backtrace = 0, show_backtrace_override = 0, skip_backtrace = 0; static pa_log_flags_t flags = 0, flags_override = 0; +static pa_bool_t no_rate_limit = FALSE; #ifdef HAVE_SYSLOG_H static const int level_to_syslog[] = { @@ -194,54 +197,61 @@ static char* get_backtrace(unsigned show_nframes) { #endif static void init_defaults(void) { - const char *e; + PA_ONCE_BEGIN { - if (!ident) { - char binary[256]; - if (pa_get_binary_name(binary, sizeof(binary))) - pa_log_set_ident(binary); - } + const char *e; - if (getenv(ENV_LOG_SYSLOG)) { - target_override = PA_LOG_SYSLOG; - target_override_set = TRUE; - } + if (!ident) { + char binary[256]; + if (pa_get_binary_name(binary, sizeof(binary))) + pa_log_set_ident(binary); + } - if ((e = getenv(ENV_LOG_LEVEL))) { - maximum_level_override = (pa_log_level_t) atoi(e); + if (getenv(ENV_LOG_SYSLOG)) { + target_override = PA_LOG_SYSLOG; + target_override_set = TRUE; + } - if (maximum_level_override >= PA_LOG_LEVEL_MAX) - maximum_level_override = PA_LOG_LEVEL_MAX-1; - } + if ((e = getenv(ENV_LOG_LEVEL))) { + maximum_level_override = (pa_log_level_t) atoi(e); - if (getenv(ENV_LOG_COLORS)) - flags_override |= PA_LOG_COLORS; + if (maximum_level_override >= PA_LOG_LEVEL_MAX) + maximum_level_override = PA_LOG_LEVEL_MAX-1; + } - if (getenv(ENV_LOG_PRINT_TIME)) - flags_override |= PA_LOG_PRINT_TIME; + if (getenv(ENV_LOG_COLORS)) + flags_override |= PA_LOG_COLORS; - if (getenv(ENV_LOG_PRINT_FILE)) - flags_override |= PA_LOG_PRINT_FILE; + if (getenv(ENV_LOG_PRINT_TIME)) + flags_override |= PA_LOG_PRINT_TIME; - if (getenv(ENV_LOG_PRINT_META)) - flags_override |= PA_LOG_PRINT_META; + if (getenv(ENV_LOG_PRINT_FILE)) + flags_override |= PA_LOG_PRINT_FILE; - if (getenv(ENV_LOG_PRINT_LEVEL)) - flags_override |= PA_LOG_PRINT_LEVEL; + if (getenv(ENV_LOG_PRINT_META)) + flags_override |= PA_LOG_PRINT_META; - if ((e = getenv(ENV_LOG_BACKTRACE))) { - show_backtrace_override = (unsigned) atoi(e); + if (getenv(ENV_LOG_PRINT_LEVEL)) + flags_override |= PA_LOG_PRINT_LEVEL; - if (show_backtrace_override <= 0) - show_backtrace_override = 0; - } + if ((e = getenv(ENV_LOG_BACKTRACE))) { + show_backtrace_override = (unsigned) atoi(e); - if ((e = getenv(ENV_LOG_BACKTRACE_SKIP))) { - skip_backtrace = (unsigned) atoi(e); + if (show_backtrace_override <= 0) + show_backtrace_override = 0; + } - if (skip_backtrace <= 0) - skip_backtrace = 0; - } + if ((e = getenv(ENV_LOG_BACKTRACE_SKIP))) { + skip_backtrace = (unsigned) atoi(e); + + if (skip_backtrace <= 0) + skip_backtrace = 0; + } + + if (getenv(ENV_LOG_NO_RATELIMIT)) + no_rate_limit = TRUE; + + } PA_ONCE_END; } void pa_log_levelv_meta( @@ -267,9 +277,7 @@ void pa_log_levelv_meta( pa_assert(level < PA_LOG_LEVEL_MAX); pa_assert(format); - PA_ONCE_BEGIN { - init_defaults(); - } PA_ONCE_END; + init_defaults(); _target = target_override_set ? target_override : target; _maximum_level = PA_MAX(maximum_level, maximum_level_override); @@ -285,7 +293,7 @@ void pa_log_levelv_meta( if ((_flags & PA_LOG_PRINT_META) && file && line > 0 && func) pa_snprintf(location, sizeof(location), "[%s:%i %s()] ", file, line, func); - else if (_flags & (PA_LOG_PRINT_META|PA_LOG_PRINT_FILE)) + else if ((_flags & (PA_LOG_PRINT_META|PA_LOG_PRINT_FILE)) && file) pa_snprintf(location, sizeof(location), "%s: ", pa_path_get_filename(file)); else location[0] = 0; @@ -294,7 +302,7 @@ void pa_log_levelv_meta( static pa_usec_t start, last; pa_usec_t u, a, r; - u = pa_rtclock_usec(); + u = pa_rtclock_now(); PA_ONCE_BEGIN { start = u; @@ -323,7 +331,7 @@ void pa_log_levelv_meta( #endif if (!pa_utf8_valid(text)) - pa_log_level(level, __FILE__": invalid UTF-8 string following below:"); + pa_logl(level, "Invalid UTF-8 string following below:"); for (t = text; t; t = n) { if ((n = strchr(t, '\n'))) { @@ -423,9 +431,14 @@ void pa_log_level(pa_log_level_t level, const char *format, ...) { va_end(ap); } -pa_bool_t pa_log_ratelimit(void) { +pa_bool_t pa_log_ratelimit(pa_log_level_t level) { /* Not more than 10 messages every 5s */ static PA_DEFINE_RATELIMIT(ratelimit, 5 * PA_USEC_PER_SEC, 10); - return pa_ratelimit_test(&ratelimit); + init_defaults(); + + if (no_rate_limit) + return TRUE; + + return pa_ratelimit_test(&ratelimit, level); }