diff --git a/src/python/jw/pkg/lib/App.py b/src/python/jw/pkg/lib/App.py index 560fe3ee..016ddaa2 100644 --- a/src/python/jw/pkg/lib/App.py +++ b/src/python/jw/pkg/lib/App.py @@ -9,7 +9,19 @@ from argparse import ArgumentDefaultsHelpFormatter, ArgumentParser, Namespace from typing import Any, cast, override, TYPE_CHECKING from .AsyncRunner import AsyncRunner -from .log import DEBUG, ERR, NOTICE, log, log_m, set_log_flags, set_log_level +from .log import ( + DEBUG, + ERR, + NOTICE, + LogFlag, + log, + log_m, + parse_log_flags, + parse_log_level, + set_log_flags, + set_log_level +) + from .Types import LoadTypes from .util import pretty_cmd @@ -46,15 +58,27 @@ class App: # export def _default_log_flags_env(self) -> str: return 'JW_DEFAULT_LOG_FLAGS' + def _default_log_flags(self, default: LogFlag) -> LogFlag: + return default + def _default_log_level_env(self) -> str: return 'JW_DEFAULT_LOG_LEVEL' + def _default_log_level(self, default: int) -> int: + return default + def _default_log_file_env(self) -> str: return 'JW_DEFAULT_LOG_FILE' + def _default_log_file(self, default: str | None) -> str | None: + return default + def _default_show_backtrace_env(self) -> str: return 'JW_DEFAULT_SHOW_BACKTRACE' + def _default_show_backtrace(self, default: bool) -> bool: + return default + def __init__( self, description: str = '', @@ -125,20 +149,25 @@ class App: # export self.__args: Namespace | None = None self.__cmdline: str | None = None - self.__default_log_flags: str = os.getenv( - self._default_log_flags_env(), default = 'stderr,position,prio,color' + + self.__default_log_flags = self._default_log_flags( + LogFlag.STDERR | LogFlag.POSITION | LogFlag.PRIO | LogFlag.COLOR ) - self.__default_log_level: str | int | None = os.getenv( - self._default_log_level_env(), default = NOTICE - ) - self.__default_log_file: str | None = os.getenv( - self._default_log_file_env(), default = None - ) - backtrace: str | bool = os.getenv(self._default_show_backtrace_env(), False) - self.__back_trace = isinstance(backtrace, str) and backtrace.lower() in { - '1', - 'true', - } + if (env := os.getenv(self._default_log_flags_env(), None)) is not None: + self.__default_log_flags = parse_log_flags(env) + + self.__default_log_level = self._default_log_level(NOTICE) + if (env := os.getenv(self._default_log_level_env(), None)) is not None: + self.__default_log_level = parse_log_level(env) + + self.__default_log_file = self._default_log_file(None) + if (env := os.getenv(self._default_log_file_env(), None)) is not None: + self.__default_log_file = env + + self.__back_trace = self._default_show_backtrace(False) + if (env := os.getenv(self._default_show_backtrace_env())) is not None: + self.__back_trace = env.lower() in ['1', 'true'] + set_log_flags(self.__default_log_flags) set_log_level(self.__default_log_level) diff --git a/test/integration/jw-pkg/help/test-expected.txt b/test/integration/jw-pkg/help/test-expected.txt index 95651dcb..391580ec 100644 --- a/test/integration/jw-pkg/help/test-expected.txt +++ b/test/integration/jw-pkg/help/test-expected.txt @@ -11,7 +11,7 @@ jw-pkg swiss army knife options: --log-flags LOG_FLAGS - Log flags (default: stderr,position,prio,color) + Log flags (default: color,position,prio,stderr) --log-level LOG_LEVEL Log level (default: 5) --log-file LOG_FILE Log file (default: None)