mirror of
ssh://git.janware.com/janware/proj/jw-pkg
synced 2026-04-25 01:25:55 +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