Re: [PATCH bpf-next] libbpf: configure log verbosity with env variable

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, May 24, 2024 at 6:21 AM Mykyta Yatsenko
<mykyta.yatsenko5@xxxxxxxxx> wrote:
>
> From: Mykyta Yatsenko <yatsenko@xxxxxxxx>
>
> 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: Mykyta Yatsenko <yatsenko@xxxxxxxx>
> ---
>  Documentation/bpf/libbpf/libbpf_overview.rst |  7 ++++++
>  tools/lib/bpf/libbpf.c                       | 24 +++++++++++++++++++-
>  tools/lib/bpf/libbpf.h                       |  5 +++-
>  3 files changed, 34 insertions(+), 2 deletions(-)
>

I did a few tweaks, mentioned below, and applied to bpf-next. Thanks!

> diff --git a/Documentation/bpf/libbpf/libbpf_overview.rst b/Documentation/bpf/libbpf/libbpf_overview.rst
> index f36a2d4ffea2..982dfd71a13d 100644
> --- a/Documentation/bpf/libbpf/libbpf_overview.rst
> +++ b/Documentation/bpf/libbpf/libbpf_overview.rst
> @@ -219,6 +219,13 @@ 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()``.
> +

reformatted this to use line length consistent with the rest of the document

>  Additional Documentation
>  ========================
>
> diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
> index 5401f2df463d..d0465ca74afc 100644
> --- a/tools/lib/bpf/libbpf.c
> +++ b/tools/lib/bpf/libbpf.c
> @@ -229,7 +229,29 @@ 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)
> +       static enum libbpf_print_level min_level = LIBBPF_INFO;
> +       static const char *env_var = "LIBBPF_LOG_LEVEL";

no need for this to be static

> +       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, "Unexpected value of %s env variable\n", env_var);

I've added "libbpf: " prefix and expanded the message with supported values.

> +               }
> +       }
> +
> +       /* if too verbose, skip logging  */
> +       if (level > min_level)
>                 return 0;
>
>         return vfprintf(stderr, format, args);
> diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h
> index c3f77d9260fe..26e4e35528c5 100644
> --- a/tools/lib/bpf/libbpf.h
> +++ b/tools/lib/bpf/libbpf.h
> @@ -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.
>   *
> --
> 2.45.0
>





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux