From 780976bf91de549599fc1165d391ddc7d5dc895d Mon Sep 17 00:00:00 2001 From: Arne Welzel Date: Thu, 26 Sep 2024 10:49:50 +0200 Subject: [PATCH] zeek-setup: Support enabling debug streams through env variable For debugging btests, it can be convenient to enable debug streams by setting an environment variable rather than editing zeek invocations and adding -B selectively. Sample use case: $ export ZEEK_DEBUG_LOG_STREAMS=all $ btest -d core/failing-test.zeek $ less .tmp/core/failing-test/debug.log This change makes Zeek's -B option and ZEEK_DEBUG_LOG_STREAMS are additive. --- src/DebugLogger.h | 3 +++ src/Options.cc | 5 ++++- src/zeek-setup.cc | 6 +++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/DebugLogger.h b/src/DebugLogger.h index d22373b3ae..a8df9cd977 100644 --- a/src/DebugLogger.h +++ b/src/DebugLogger.h @@ -85,6 +85,9 @@ public: bool IsEnabled(DebugStream stream) const { return streams[int(stream)].enabled; } + // Are any streams enabled? + bool HasEnabledStreams() const { return ! enabled_streams.empty(); } + void SetVerbose(bool arg_verbose) { verbose = arg_verbose; } bool IsVerbose() const { return verbose; } diff --git a/src/Options.cc b/src/Options.cc index c0c6ff3d4e..2d0bb632c0 100644 --- a/src/Options.cc +++ b/src/Options.cc @@ -170,7 +170,10 @@ void usage(const char* prog, int code) { "not set, will use first IPv4 address from /etc/resolv.conf"); fprintf(stderr, " $ZEEK_DEBUG_LOG_STDERR | Use stderr for debug logs generated via " - "the -B flag"); + "the -B flag\n"); + fprintf(stderr, + " $ZEEK_DEBUG_LOG_STREAMS | Enable debugging output for selected " + "streams (see the -B flag)"); fprintf(stderr, "\n"); diff --git a/src/zeek-setup.cc b/src/zeek-setup.cc index 8e39653b6d..3cf44a5b7f 100644 --- a/src/zeek-setup.cc +++ b/src/zeek-setup.cc @@ -556,9 +556,13 @@ SetupResult setup(int argc, char** argv, Options* zopts) { reporter->FatalError("-u incompatible with --no-unused-warnings"); #ifdef DEBUG - if ( options.debug_log_streams ) { + if ( options.debug_log_streams ) debug_logger.EnableStreams(options.debug_log_streams->data()); + if ( const auto* streams = getenv("ZEEK_DEBUG_LOG_STREAMS") ) + debug_logger.EnableStreams(streams); + + if ( debug_logger.HasEnabledStreams() ) { if ( getenv("ZEEK_DEBUG_LOG_STDERR") ) debug_logger.OpenDebugLog(nullptr); else