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
	
	 Wim Taymans
						Wim Taymans