musicmuster/app/log.py
2021-04-30 02:48:06 +01:00

96 lines
1.8 KiB
Python

#!/usr/bin/python3
import logging
import logging.handlers
import sys
import traceback
from config import Config
class LevelTagFilter(logging.Filter):
"Add leveltag"
def filter(self, record):
# Extract the first character of the level name
record.leveltag = record.levelname[0]
# We never actually filter messages out, just abuse filtering to add an
# extra field to the LogRecord
return True
log = logging.getLogger(Config.LOG_NAME)
log.setLevel(logging.DEBUG)
# stderr
stderr = logging.StreamHandler()
stderr.setLevel(Config.LOG_LEVEL_STDERR)
# syslog
syslog = logging.handlers.SysLogHandler(address='/dev/log')
syslog.setLevel(Config.LOG_LEVEL_SYSLOG)
# Filter
filter = LevelTagFilter()
syslog.addFilter(filter)
stderr.addFilter(filter)
# create formatter and add it to the handlers
stderr_fmt = logging.Formatter('%(leveltag)s: %(message)s')
syslog_fmt = logging.Formatter('[%(name)s] %(leveltag)s: %(message)s')
stderr.setFormatter(stderr_fmt)
syslog.setFormatter(syslog_fmt)
# add the handlers to the log
log.addHandler(stderr)
log.addHandler(syslog)
def log_uncaught_exceptions(ex_cls, ex, tb):
print("\033[1;31;47m")
logging.critical(''.join(traceback.format_tb(tb)))
print("\033[1;37;40m")
logging.critical('{0}: {1}'.format(ex_cls, ex))
sys.excepthook = log_uncaught_exceptions
def DEBUG(msg):
log.debug(msg)
def EXCEPTION(msg):
log.exception(msg, exc_info=True, stack_info=True)
def ERROR(msg):
log.error(msg)
def INFO(msg):
log.info(msg)
if __name__ == "__main__":
DEBUG("hi debug")
ERROR("hi error")
INFO("hi info")
EXCEPTION("hi exception")
def f():
return g()
def g():
return h()
def h():
return i()
def i():
1 / 0
f()