75 lines
1.9 KiB
Python
75 lines
1.9 KiB
Python
#!/usr/bin/python3
|
|
# Standard library imports
|
|
import logging
|
|
import logging.handlers
|
|
import os
|
|
import sys
|
|
from traceback import print_exception
|
|
|
|
# PyQt imports
|
|
|
|
# Third party imports
|
|
import colorlog
|
|
import stackprinter # type: ignore
|
|
|
|
# App imports
|
|
from config import Config
|
|
|
|
|
|
class LevelTagFilter(logging.Filter):
|
|
"""Add leveltag"""
|
|
|
|
def filter(self, record: logging.LogRecord):
|
|
# 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)
|
|
local_filter = LevelTagFilter()
|
|
|
|
# stderr
|
|
stderr = colorlog.StreamHandler()
|
|
stderr.setLevel(Config.LOG_LEVEL_STDERR)
|
|
stderr.addFilter(local_filter)
|
|
stderr_fmt = colorlog.ColoredFormatter(
|
|
"%(log_color)s[%(asctime)s] %(filename)s:%(lineno)s %(message)s", datefmt="%H:%M:%S"
|
|
)
|
|
stderr.setFormatter(stderr_fmt)
|
|
log.addHandler(stderr)
|
|
|
|
# syslog
|
|
syslog = logging.handlers.SysLogHandler(address="/dev/log")
|
|
syslog.setLevel(Config.LOG_LEVEL_SYSLOG)
|
|
syslog.addFilter(local_filter)
|
|
syslog_fmt = logging.Formatter(
|
|
"[%(name)s] %(filename)s:%(lineno)s %(leveltag)s: %(message)s"
|
|
)
|
|
syslog.setFormatter(syslog_fmt)
|
|
log.addHandler(syslog)
|
|
|
|
|
|
def log_uncaught_exceptions(type_, value, traceback):
|
|
from helpers import send_mail
|
|
|
|
print("\033[1;31;47m")
|
|
print_exception(type_, value, traceback)
|
|
print("\033[1;37;40m")
|
|
print(
|
|
stackprinter.format(
|
|
value, suppressed_paths=["/pypoetry/virtualenvs/"], style="darkbg"
|
|
)
|
|
)
|
|
if os.environ["MM_ENV"] == "PRODUCTION":
|
|
msg = stackprinter.format(value)
|
|
send_mail(
|
|
Config.ERRORS_TO, Config.ERRORS_FROM, "Exception from musicmuster", msg
|
|
)
|
|
|
|
|
|
sys.excepthook = log_uncaught_exceptions
|