log.slog(): Support log flag "module"

If module is present in the log flags string, the module is prepended
to each log message. The length of the module prefix can be set via
the new set_module_name_length() function.

Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
Jan Lindemann 2025-06-01 15:14:48 +02:00
commit cf122e44be

View file

@ -53,6 +53,7 @@ CONSOLE_FONT_BLINK = '\033[5m'
CONSOLE_FONT_OFF = '\033[m' CONSOLE_FONT_OFF = '\033[m'
f_position = 'position' f_position = 'position'
f_module = 'module'
f_date = 'date' f_date = 'date'
f_stderr = 'stderr' f_stderr = 'stderr'
f_stdout = 'stdout' f_stdout = 'stdout'
@ -63,6 +64,7 @@ f_default = [ f_position, f_stderr, f_prio, f_color ]
_flags = set(f_default) _flags = set(f_default)
_log_prefix = '' _log_prefix = ''
_file_name_len = 20 _file_name_len = 20
_module_name_len = 50
_short_prio_str = { _short_prio_str = {
EMERG : '<Y>', EMERG : '<Y>',
@ -104,7 +106,8 @@ def get_caller_pos(up: int = 1, kwargs: Optional[dict[str, Any]] = None) -> Tupl
del kwargs['caller'] del kwargs['caller']
return r return r
caller = inspect.stack()[up+1] caller = inspect.stack()[up+1]
return (basename(caller.filename), caller.lineno) mod = inspect.getmodule(caller[0]).__name__
return (mod, basename(caller.filename), caller.lineno)
def slog_m(prio: int, *args, **kwargs) -> None: # export def slog_m(prio: int, *args, **kwargs) -> None: # export
if prio > _level: if prio > _level:
@ -140,10 +143,15 @@ def slog(prio: int, *args, only_printable: bool=False, **kwargs) -> None: # expo
msg += _short_prio_str[prio] + ' ' msg += _short_prio_str[prio] + ' '
if f_position in _flags: if f_position in _flags:
if 'caller' in kwargs: if 'caller' in kwargs:
name, line = kwargs['caller'] mod, name, line = kwargs['caller']
else: else:
name, line = get_caller_pos(1) mod, name, line = get_caller_pos(1)
if f_module in _flags:
msg += misc.pad(mod, _module_name_len)
msg += misc.pad(name, _file_name_len) + '[' + misc.pad(str(line), 4, True) + ']' msg += misc.pad(name, _file_name_len) + '[' + misc.pad(str(line), 4, True) + ']'
if f_color in _flags: if f_color in _flags:
@ -267,3 +275,10 @@ def set_filename_length(l: int) -> int: # export
if l: if l:
_file_name_len = l _file_name_len = l
return r return r
def set_module_name_length(l: int) -> int: # export
global _module_name_len
r = _module_name_len
if l:
_module_name_len = l
return r