From 7d63efa5f56b4ae111829ac45ea1ad7174991bad Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Thu, 11 Jun 2026 18:36:17 +0200 Subject: [PATCH] MINOR: errors: add ha_diag_notice() to report diag-level notifications Right now the only way to report info that is only displayed in diag mode with -dD is to use ha_diag_warning(). The problem is that this is then counted as a warning and may result in errors when combined with -dW, as happens for the CPU topology info: $ printf "global\nstats socket /tmp/sock1\n" | ./haproxy -dD -dW -c -f /dev/stdin; echo $? [NOTICE] (10406) : haproxy version is 3.5-dev0-5091ac-35 [NOTICE] (10406) : path to executable is ./haproxy [DIAG] (10406) : Created 20 threads split into 2 groups [ALERT] (10406) : Some warnings were found and 'zero-warning' is set. Aborting. 1 We need another level. This commit introduces ha_diag_notice() which only emits a notification that doesn't count as a warning. Note that we could even introduce an info level and revisit various messages so that notice only reports certain events while info is for anything (like versions above). That could be a future improvement. --- include/haproxy/errors.h | 2 ++ src/errors.c | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/include/haproxy/errors.h b/include/haproxy/errors.h index c102fedb8..1fa501724 100644 --- a/include/haproxy/errors.h +++ b/include/haproxy/errors.h @@ -101,6 +101,8 @@ void ha_warning(const char *fmt, ...) * These functions are reserved to output diagnostics on MODE_DIAG. * Use the underscore variants only if MODE_DIAG has already been checked. */ +void ha_diag_notice(const char *fmt, ...) + __attribute__ ((format(printf, 1 ,2))); void _ha_vdiag_warning(const char *fmt, va_list argp); void _ha_diag_warning(const char *fmt, ...); void ha_diag_warning(const char *fmt, ...) diff --git a/src/errors.c b/src/errors.c index f71622c0a..9f334dbe4 100644 --- a/src/errors.c +++ b/src/errors.c @@ -386,6 +386,20 @@ void ha_diag_warning(const char *fmt, ...) } } +/* + * Displays the message on stderr with the pid if MODE_DIAG is set. + */ +void ha_diag_notice(const char *fmt, ...) +{ + va_list argp; + + if (global.mode & MODE_DIAG) { + va_start(argp, fmt); + print_message(1, "DIAG", fmt, argp); + va_end(argp); + } +} + /* * Displays the message on stderr with the pid. */