lib.App: Make default log values overridable
All checks were successful
CI / Packaging - Kali Linux (pull_request) Successful in 4m0s
CI / Packaging - OpenSUSE Tumbleweed (pull_request) Successful in 4m11s
CI / Packaging test (pull_request) Successful in 0s
CI / Packaging - Kali Linux (push) Successful in 3m40s
CI / Packaging - OpenSUSE Tumbleweed (push) Successful in 3m59s
CI / Packaging test (push) Successful in 0s
All checks were successful
CI / Packaging - Kali Linux (pull_request) Successful in 4m0s
CI / Packaging - OpenSUSE Tumbleweed (pull_request) Successful in 4m11s
CI / Packaging test (pull_request) Successful in 0s
CI / Packaging - Kali Linux (push) Successful in 3m40s
CI / Packaging - OpenSUSE Tumbleweed (push) Successful in 3m59s
CI / Packaging test (push) Successful in 0s
The __init__() method reads default log configuration directly from environment variables, making it impossible for subclasses to change defaults. Extract the defaults into _default_log_flags(), _default_log_level(), _default_log_file(), and _default_show_backtrace() methods, then call them from __init__(). Subclasses can now override these methods to customize defaults without needing to override the entire __init__() method. Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
parent
90e221e106
commit
2eeaaf9681
2 changed files with 44 additions and 15 deletions
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue