Commit eb4e7726 authored by Mykyta Yatsenko's avatar Mykyta Yatsenko Committed by Andrii Nakryiko
Browse files

libbpf: Configure log verbosity with env variable



Configure logging verbosity by setting LIBBPF_LOG_LEVEL environment
variable, which is applied only to default logger. Once user set their
custom logging callback, it is up to them to handle filtering.

Signed-off-by: default avatarMykyta Yatsenko <yatsenko@meta.com>
Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20240524131840.114289-1-yatsenko@meta.com
parent 4b3529ed
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -219,6 +219,14 @@ compilation and skeleton generation. Using Libbpf-rs will make building user
space part of the BPF application easier. Note that the BPF program themselves
must still be written in plain C.

libbpf logging
==============

By default, libbpf logs informational and warning messages to stderr. The
verbosity of these messages can be controlled by setting the environment
variable LIBBPF_LOG_LEVEL to either warn, info, or debug. A custom log
callback can be set using ``libbpf_set_print()``.

Additional Documentation
========================

+24 −1
Original line number Diff line number Diff line
@@ -229,7 +229,30 @@ static const char * const prog_type_name[] = {
static int __base_pr(enum libbpf_print_level level, const char *format,
		     va_list args)
{
	if (level == LIBBPF_DEBUG)
	const char *env_var = "LIBBPF_LOG_LEVEL";
	static enum libbpf_print_level min_level = LIBBPF_INFO;
	static bool initialized;

	if (!initialized) {
		char *verbosity;

		initialized = true;
		verbosity = getenv(env_var);
		if (verbosity) {
			if (strcasecmp(verbosity, "warn") == 0)
				min_level = LIBBPF_WARN;
			else if (strcasecmp(verbosity, "debug") == 0)
				min_level = LIBBPF_DEBUG;
			else if (strcasecmp(verbosity, "info") == 0)
				min_level = LIBBPF_INFO;
			else
				fprintf(stderr, "libbpf: unrecognized '%s' envvar value: '%s', should be one of 'warn', 'debug', or 'info'.\n",
					env_var, verbosity);
		}
	}

	/* if too verbose, skip logging  */
	if (level > min_level)
		return 0;

	return vfprintf(stderr, format, args);
+4 −1
Original line number Diff line number Diff line
@@ -98,7 +98,10 @@ typedef int (*libbpf_print_fn_t)(enum libbpf_print_level level,

/**
 * @brief **libbpf_set_print()** sets user-provided log callback function to
 * be used for libbpf warnings and informational messages.
 * be used for libbpf warnings and informational messages. If the user callback
 * is not set, messages are logged to stderr by default. The verbosity of these
 * messages can be controlled by setting the environment variable
 * LIBBPF_LOG_LEVEL to either warn, info, or debug.
 * @param fn The log print function. If NULL, libbpf won't print anything.
 * @return Pointer to old print function.
 *