mirror of
ssh://git.janware.com/janware/proj/jw-pkg
synced 2026-04-25 09:35:54 +02:00
lib.log: Add module
A dedicated logging module is currently provided by jw-python, but since it's often needed also in jw-pkg, and it's relatively small and maintainable, it seems justified to move it into jw-pkg. Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
parent
2e69639362
commit
f7cc364be2
1 changed files with 78 additions and 0 deletions
78
src/python/jw/pkg/lib/log.py
Normal file
78
src/python/jw/pkg/lib/log.py
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
import sys, syslog, datetime
|
||||
|
||||
EMERG = int(syslog.LOG_EMERG)
|
||||
ALERT = int(syslog.LOG_ALERT)
|
||||
CRIT = int(syslog.LOG_CRIT)
|
||||
ERR = int(syslog.LOG_ERR)
|
||||
WARNING = int(syslog.LOG_WARNING)
|
||||
NOTICE = int(syslog.LOG_NOTICE)
|
||||
INFO = int(syslog.LOG_INFO)
|
||||
DEBUG = int(syslog.LOG_DEBUG)
|
||||
DEVEL = int(syslog.LOG_DEBUG + 1)
|
||||
OFF = DEVEL + 1
|
||||
|
||||
_log_level = NOTICE
|
||||
_last_tstamp = datetime.datetime.now()
|
||||
_first_tstamp = _last_tstamp
|
||||
|
||||
def _log_level_name_by_value():
|
||||
if _log_level_name_by_value.map is None:
|
||||
_log_level_name_by_value.map = {
|
||||
EMERG: "EMERG",
|
||||
ALERT: "ALERT",
|
||||
CRIT: "CRIT",
|
||||
ERR: "ERR",
|
||||
WARNING: "WARNING",
|
||||
NOTICE: "NOTICE",
|
||||
INFO: "INFO",
|
||||
DEBUG: "DEBUG",
|
||||
DEVEL: "DEVEL",
|
||||
OFF: "OFF"
|
||||
}
|
||||
return _log_level_name_by_value.map
|
||||
_log_level_name_by_value.map: dict[int, str]|None = None
|
||||
|
||||
def _log_level_value_by_name():
|
||||
if _log_level_value_by_name.map is None:
|
||||
_log_level_value_by_name.map = {}
|
||||
for value, name in _log_level_name_by_value().items():
|
||||
_log_level_value_by_name.map[name] = value
|
||||
_log_level_value_by_name.map[name.lower()] = value
|
||||
return _log_level_value_by_name.map
|
||||
_log_level_value_by_name.map: dict[str, int]|None = None
|
||||
|
||||
def get_log_level_name(level: int) -> str:
|
||||
return _log_level_name_by_value()[level]
|
||||
|
||||
def parse_log_level(level: str|int) -> int:
|
||||
try:
|
||||
ret = int(level)
|
||||
if ret >= 0 and ret <= DEVEL:
|
||||
return ret
|
||||
except ValueError:
|
||||
return _log_level_value_by_name()[level]
|
||||
raise Exception("Invalid log level ", level)
|
||||
|
||||
def set_log_level(level: int|None=None) -> int:
|
||||
global _log_level
|
||||
ret = _log_level
|
||||
if level is not None:
|
||||
_log_level = parse_log_level(level)
|
||||
return ret
|
||||
|
||||
def set_log_flags(*args, **kwargs):
|
||||
pass
|
||||
|
||||
def log(prio: int, *args, **kwargs):
|
||||
global _log_level
|
||||
if prio > _log_level:
|
||||
return
|
||||
print(*args, file = sys.stderr)
|
||||
|
||||
def log_time_diff(prio: int, *args, **kwargs):
|
||||
global _last_tstamp
|
||||
now = datetime.datetime.now()
|
||||
log(prio, now - _last_tstamp, now - _first_tstamp, *args)
|
||||
_last_tstamp = now
|
||||
Loading…
Add table
Add a link
Reference in a new issue