mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-29 05:40:27 -04:00
pipewire: support global log level in PIPEWIRE_DEBUG
Add support for PIPEWIRE_DEBUG=3,foo.bar:5 to set a global log level in addition to specific topics. Previously it would have to be done with *:3,foo.bar:5, which would not really set a global level but all topics to the custom level of 3.
This commit is contained in:
parent
da3273891c
commit
9b3b6e2401
2 changed files with 32 additions and 21 deletions
|
|
@ -487,22 +487,30 @@ static struct spa_log *load_journal_logger(struct support *support,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static enum spa_log_level
|
static bool
|
||||||
parse_log_level(const char *str)
|
parse_log_level(const char *str, enum spa_log_level *l)
|
||||||
{
|
{
|
||||||
enum spa_log_level l = SPA_LOG_LEVEL_NONE;
|
uint32_t lvl;
|
||||||
switch(str[0]) {
|
if (strlen(str) == 1) {
|
||||||
case 'X': l = SPA_LOG_LEVEL_NONE; break;
|
switch(str[0]) {
|
||||||
case 'E': l = SPA_LOG_LEVEL_ERROR; break;
|
case 'X': lvl = SPA_LOG_LEVEL_NONE; break;
|
||||||
case 'W': l = SPA_LOG_LEVEL_WARN; break;
|
case 'E': lvl = SPA_LOG_LEVEL_ERROR; break;
|
||||||
case 'I': l = SPA_LOG_LEVEL_INFO; break;
|
case 'W': lvl = SPA_LOG_LEVEL_WARN; break;
|
||||||
case 'D': l = SPA_LOG_LEVEL_DEBUG; break;
|
case 'I': lvl = SPA_LOG_LEVEL_INFO; break;
|
||||||
case 'T': l = SPA_LOG_LEVEL_TRACE; break;
|
case 'D': lvl = SPA_LOG_LEVEL_DEBUG; break;
|
||||||
|
case 'T': lvl = SPA_LOG_LEVEL_TRACE; break;
|
||||||
default:
|
default:
|
||||||
l = atoi(str);
|
goto check_int;
|
||||||
break;
|
}
|
||||||
|
} else {
|
||||||
|
check_int:
|
||||||
|
if (!spa_atou32(str, &lvl, 0))
|
||||||
|
return false;
|
||||||
|
if (lvl > SPA_LOG_LEVEL_TRACE)
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
return l;
|
*l = lvl;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
|
|
@ -515,6 +523,7 @@ parse_pw_debug_env(void)
|
||||||
char json[1024] = {0};
|
char json[1024] = {0};
|
||||||
char *pos = json;
|
char *pos = json;
|
||||||
char *end = pos + sizeof(json) - 1;
|
char *end = pos + sizeof(json) - 1;
|
||||||
|
enum spa_log_level lvl;
|
||||||
|
|
||||||
str = getenv("PIPEWIRE_DEBUG");
|
str = getenv("PIPEWIRE_DEBUG");
|
||||||
|
|
||||||
|
|
@ -530,7 +539,8 @@ parse_pw_debug_env(void)
|
||||||
/* We only have single-digit log levels, so any single-character
|
/* We only have single-digit log levels, so any single-character
|
||||||
* string is of the form PIPEWIRE_DEBUG=<N> */
|
* string is of the form PIPEWIRE_DEBUG=<N> */
|
||||||
if (slen == 1) {
|
if (slen == 1) {
|
||||||
pw_log_set_level(parse_log_level(str));
|
if (parse_log_level(str, &lvl))
|
||||||
|
pw_log_set_level(lvl);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -541,15 +551,14 @@ parse_pw_debug_env(void)
|
||||||
int n_tok;
|
int n_tok;
|
||||||
char **tok;
|
char **tok;
|
||||||
char *pattern;
|
char *pattern;
|
||||||
enum spa_log_level lvl;
|
|
||||||
|
|
||||||
tok = pw_split_strv(tokens[i], ":", 2, &n_tok);
|
tok = pw_split_strv(tokens[i], ":", 2, &n_tok);
|
||||||
if (n_tok == 2) {
|
if (n_tok == 2 && parse_log_level(tok[1], &lvl)) {
|
||||||
pattern = tok[0];
|
pattern = tok[0];
|
||||||
lvl = parse_log_level(tok[1]);
|
|
||||||
|
|
||||||
pos += spa_scnprintf(pos, end - pos, "{ %s = %d },",
|
pos += spa_scnprintf(pos, end - pos, "{ %s = %d },",
|
||||||
pattern, lvl);
|
pattern, lvl);
|
||||||
|
} else if (n_tok == 1 && parse_log_level(tok[0], &lvl)) {
|
||||||
|
pw_log_set_level(lvl);
|
||||||
} else {
|
} else {
|
||||||
pw_log_warn("Ignoring invalid format in PIPEWIRE_DEBUG: '%s'\n", tokens[i]);
|
pw_log_warn("Ignoring invalid format in PIPEWIRE_DEBUG: '%s'\n", tokens[i]);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -350,8 +350,10 @@ PWTEST(logger_debug_env_invalid)
|
||||||
"invalid value",
|
"invalid value",
|
||||||
"*:5,some invalid value",
|
"*:5,some invalid value",
|
||||||
"*:W,foo.bar:3,invalid:",
|
"*:W,foo.bar:3,invalid:",
|
||||||
"*:W,1,foo.bar:D",
|
"*:W,2,foo.bar:Q",
|
||||||
"*:W,D,foo.bar:3",
|
"*:W,7,foo.bar:D",
|
||||||
|
"*:W,Q,foo.bar:5",
|
||||||
|
"*:W,D,foo.bar:8",
|
||||||
};
|
};
|
||||||
|
|
||||||
pwtest_int_lt(which, SPA_N_ELEMENTS(envvars));
|
pwtest_int_lt(which, SPA_N_ELEMENTS(envvars));
|
||||||
|
|
@ -644,7 +646,7 @@ PWTEST_SUITE(logger)
|
||||||
PWTEST_ARG_RANGE, SPA_LOG_LEVEL_NONE, SPA_LOG_LEVEL_TRACE + 1,
|
PWTEST_ARG_RANGE, SPA_LOG_LEVEL_NONE, SPA_LOG_LEVEL_TRACE + 1,
|
||||||
PWTEST_NOARG);
|
PWTEST_NOARG);
|
||||||
pwtest_add(logger_debug_env_invalid,
|
pwtest_add(logger_debug_env_invalid,
|
||||||
PWTEST_ARG_RANGE, 0, 5, /* see the test */
|
PWTEST_ARG_RANGE, 0, 7, /* see the test */
|
||||||
PWTEST_NOARG);
|
PWTEST_NOARG);
|
||||||
pwtest_add(logger_topics, PWTEST_NOARG);
|
pwtest_add(logger_topics, PWTEST_NOARG);
|
||||||
pwtest_add(logger_journal, PWTEST_NOARG);
|
pwtest_add(logger_journal, PWTEST_NOARG);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue