diff options
Diffstat (limited to 'common/msg.c')
-rw-r--r-- | common/msg.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/common/msg.c b/common/msg.c index 871666add0..0d1c165222 100644 --- a/common/msg.c +++ b/common/msg.c @@ -86,6 +86,7 @@ struct mp_log { struct mp_log_root *root; const char *prefix; const char *verbose_prefix; + int max_level; // minimum log level for this instance int level; // minimum log level for any outputs int terminal_level; // minimum log level for terminal output atomic_ulong reload_counter; @@ -125,8 +126,6 @@ static void update_loglevel(struct mp_log *log) struct mp_log_root *root = log->root; pthread_mutex_lock(&root->lock); log->level = MSGL_STATUS + root->verbose; // default log level - if (root->really_quiet) - log->level -= 10; for (int n = 0; root->msg_levels && root->msg_levels[n * 2 + 0]; n++) { if (match_mod(log->verbose_prefix, root->msg_levels[n * 2 + 0])) log->level = mp_msg_find_level(root->msg_levels[n * 2 + 1]); @@ -143,10 +142,25 @@ static void update_loglevel(struct mp_log *log) log->level = MPMAX(log->level, MSGL_DEBUG); if (log->root->stats_file) log->level = MPMAX(log->level, MSGL_STATS); + log->level = MPMIN(log->level, log->max_level); + if (root->really_quiet) + log->level = -1; atomic_store(&log->reload_counter, atomic_load(&log->root->reload_counter)); pthread_mutex_unlock(&root->lock); } +// Set (numerically) the maximum level that should still be output for this log +// instances. E.g. lev=MSGL_WARN => show only warnings and errors. +void mp_msg_set_max_level(struct mp_log *log, int lev) +{ + if (!log->root) + return; + pthread_mutex_lock(&log->root->lock); + log->max_level = MPCLAMP(lev, -1, MSGL_MAX); + pthread_mutex_unlock(&log->root->lock); + update_loglevel(log); +} + // Get the current effective msg level. // Thread-safety: see mp_msg(). int mp_msg_level(struct mp_log *log) @@ -456,6 +470,7 @@ struct mp_log *mp_log_new(void *talloc_ctx, struct mp_log *parent, talloc_set_destructor(log, destroy_log); log->root = parent->root; log->partial = talloc_strdup(NULL, ""); + log->max_level = MSGL_MAX; if (name) { if (name[0] == '!') { name = &name[1]; |