From ccb4fa26cd682812f15d2fd50b37a8c422e092f8 Mon Sep 17 00:00:00 2001 From: Peter Webb Date: Tue, 7 Feb 2023 16:15:42 -0500 Subject: [PATCH] CT-1917: Fix a regression in the behavior of the -q/--quiet cli parameter (#6886) --- .changes/unreleased/Fixes-20230207-143544.yaml | 6 ++++++ core/dbt/events/functions.py | 12 +++++++++--- core/dbt/main.py | 10 +++++++++- 3 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 .changes/unreleased/Fixes-20230207-143544.yaml diff --git a/.changes/unreleased/Fixes-20230207-143544.yaml b/.changes/unreleased/Fixes-20230207-143544.yaml new file mode 100644 index 00000000000..67850c91927 --- /dev/null +++ b/.changes/unreleased/Fixes-20230207-143544.yaml @@ -0,0 +1,6 @@ +kind: Fixes +body: Fix regression of --quiet cli parameter behavior +time: 2023-02-07T14:35:44.160163-05:00 +custom: + Author: peterallenwebb + Issue: "6749" diff --git a/core/dbt/events/functions.py b/core/dbt/events/functions.py index 786e9cdf91d..ce5d5be98b0 100644 --- a/core/dbt/events/functions.py +++ b/core/dbt/events/functions.py @@ -18,6 +18,14 @@ metadata_vars: Optional[Dict[str, str]] = None +# The "fallback" logger is used as a stop-gap so that console logging works before the logging +# configuration is fully loaded. +def setup_fallback_logger(use_legacy: bool, level: EventLevel) -> None: + cleanup_event_logger() + config = _get_logbook_log_config(level) if use_legacy else _get_stdout_config(level) + EVENT_MANAGER.add_logger(config) + + def setup_event_logger(log_path: str, level_override: Optional[EventLevel] = None): cleanup_event_logger() make_log_dir_if_missing(log_path) @@ -113,9 +121,7 @@ def cleanup_event_logger(): # currently fire before logs can be configured by setup_event_logger(), we # create a default configuration with default settings and no file output. EVENT_MANAGER: EventManager = EventManager() -EVENT_MANAGER.add_logger( - _get_logbook_log_config() if flags.ENABLE_LEGACY_LOGGER else _get_stdout_config() -) +setup_fallback_logger(bool(flags.ENABLE_LEGACY_LOGGER), EventLevel.INFO) # This global, and the following two functions for capturing stdout logs are diff --git a/core/dbt/main.py b/core/dbt/main.py index 429d823be52..f0db2a98053 100644 --- a/core/dbt/main.py +++ b/core/dbt/main.py @@ -11,8 +11,9 @@ from pathlib import Path import dbt.version -from dbt.events.functions import fire_event, setup_event_logger, LOG_VERSION +from dbt.events.functions import fire_event, setup_event_logger, setup_fallback_logger, LOG_VERSION from dbt.events.types import ( + EventLevel, MainEncounteredError, MainKeyboardInterrupt, MainReportVersion, @@ -178,6 +179,13 @@ def handle_and_check(args): # Set flags from args, user config, and env vars user_config = read_user_config(flags.PROFILES_DIR) # This is read again later flags.set_from_args(parsed, user_config) + + # If the user has asked to supress non-error logging on the cli, we want to respect that as soon as possible, + # so that any non-error logging done before full log config is loaded and ready is filtered accordingly. + setup_fallback_logger( + bool(flags.ENABLE_LEGACY_LOGGER), EventLevel.ERROR if flags.QUIET else EventLevel.INFO + ) + dbt.tracking.initialize_from_flags() # Set log_format from flags parsed.cls.set_log_format()