diff --git a/src/bentoml/_internal/configuration/__init__.py b/src/bentoml/_internal/configuration/__init__.py index 210e74888db..05d21c6719e 100644 --- a/src/bentoml/_internal/configuration/__init__.py +++ b/src/bentoml/_internal/configuration/__init__.py @@ -22,6 +22,7 @@ DEBUG_ENV_VAR = "BENTOML_DEBUG" QUIET_ENV_VAR = "BENTOML_QUIET" +VERBOSITY_ENV_VAR = "BENTOML_VERBOSITY" CONFIG_ENV_VAR = "BENTOML_CONFIG" CONFIG_OVERRIDE_ENV_VAR = "BENTOML_CONFIG_OPTIONS" CONFIG_OVERRIDE_JSON_ENV_VAR = "BENTOML_CONFIG_OVERRIDES" @@ -129,29 +130,35 @@ def get_bentoml_override_config_json_from_env() -> dict[str, t.Any] | None: return None -def set_debug_mode(enabled: bool) -> None: - os.environ[DEBUG_ENV_VAR] = str(enabled) - os.environ[GRPC_DEBUG_ENV_VAR] = "DEBUG" +def set_verbosity(verbosity: int) -> None: + os.environ[VERBOSITY_ENV_VAR] = str(verbosity) + if verbosity > 0: + os.environ[DEBUG_ENV_VAR] = "true" + os.environ[GRPC_DEBUG_ENV_VAR] = "DEBUG" + elif verbosity < 0: + os.environ[QUIET_ENV_VAR] = "true" + os.environ[GRPC_DEBUG_ENV_VAR] = "NONE" + + +def set_debug_mode(enabled: bool = True) -> None: + set_verbosity(1) - logger.info( - "%s debug mode for current BentoML session", - "Enabling" if enabled else "Disabling", - ) + +def set_quiet_mode(enabled: bool = True) -> None: + set_verbosity(-1) def get_debug_mode() -> bool: + if VERBOSITY_ENV_VAR in os.environ: + return int(os.environ[VERBOSITY_ENV_VAR]) > 0 if DEBUG_ENV_VAR in os.environ: return os.environ[DEBUG_ENV_VAR].lower() == "true" return False -def set_quiet_mode(enabled: bool) -> None: - # do not log setting quiet mode - os.environ[QUIET_ENV_VAR] = str(enabled) - os.environ[GRPC_DEBUG_ENV_VAR] = "NONE" - - def get_quiet_mode() -> bool: + if VERBOSITY_ENV_VAR in os.environ: + return int(os.environ[VERBOSITY_ENV_VAR]) < 0 if QUIET_ENV_VAR in os.environ: return os.environ[QUIET_ENV_VAR].lower() == "true" return False diff --git a/src/bentoml_cli/bentos.py b/src/bentoml_cli/bentos.py index 36b11b86a48..b2e51ef8f2b 100644 --- a/src/bentoml_cli/bentos.py +++ b/src/bentoml_cli/bentos.py @@ -394,7 +394,7 @@ def build( # type: ignore (not accessed) from bentoml._internal.log import configure_logging if output == "tag": - set_quiet_mode(True) + set_quiet_mode() configure_logging() try: diff --git a/src/bentoml_cli/utils.py b/src/bentoml_cli/utils.py index 3ec3d3e9d75..ca5a9785ec1 100644 --- a/src/bentoml_cli/utils.py +++ b/src/bentoml_cli/utils.py @@ -200,15 +200,10 @@ def with_options(self, **attrs: t.Any) -> t.Any: def setup_verbosity(ctx: Context, param: Parameter, value: int) -> int: - from bentoml._internal.configuration import set_debug_mode - from bentoml._internal.configuration import set_quiet_mode + from bentoml._internal.configuration import set_verbosity from bentoml._internal.log import configure_logging - if value == 1: - set_debug_mode(True) - elif value == -1: - set_quiet_mode(True) - + set_verbosity(value or 0) configure_logging() return value @@ -261,8 +256,7 @@ def serve(): ... @staticmethod def bentoml_common_params(f: F[P]) -> ClickFunctionWrapper[P]: # NOTE: update NUMBER_OF_COMMON_PARAMS when adding option. - from bentoml._internal.configuration import DEBUG_ENV_VAR - from bentoml._internal.configuration import QUIET_ENV_VAR + from bentoml._internal.configuration import VERBOSITY_ENV_VAR from bentoml._internal.utils.analytics import BENTOML_DO_NOT_TRACK f = cog.optgroup.option( @@ -272,7 +266,8 @@ def bentoml_common_params(f: F[P]) -> ClickFunctionWrapper[P]: flag_value=-1, default=0, expose_value=False, - envvar=QUIET_ENV_VAR, + envvar=VERBOSITY_ENV_VAR, + type=click.INT, help="Suppress all warnings and info logs", callback=setup_verbosity, is_eager=True, @@ -283,7 +278,6 @@ def bentoml_common_params(f: F[P]) -> ClickFunctionWrapper[P]: "verbosity", flag_value=1, expose_value=False, - envvar=DEBUG_ENV_VAR, help="Generate debug information", )(f) f = cog.optgroup.option(