mirror of
https://github.com/avatao-content/baseimage-tutorial-framework
synced 2024-11-22 18:21:31 +00:00
Print exceptions with stack trace
This commit is contained in:
parent
cbc62c5a10
commit
d031f481b8
@ -1,6 +1,8 @@
|
|||||||
# pylint: disable=bad-whitespace
|
# pylint: disable=bad-whitespace
|
||||||
from sys import stderr
|
from sys import stderr
|
||||||
|
from collections import deque
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from traceback import format_exception, walk_tb
|
||||||
from logging import DEBUG, getLogger, Handler, Formatter, Filter
|
from logging import DEBUG, getLogger, Handler, Formatter, Filter
|
||||||
|
|
||||||
TFW_LOG_PATH = '/var/log/tfw.log'
|
TFW_LOG_PATH = '/var/log/tfw.log'
|
||||||
@ -71,6 +73,10 @@ class TFWLogFormatter(Formatter):
|
|||||||
'NOTSET' : COLOR.CYAN
|
'NOTSET' : COLOR.CYAN
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.last_trace = None
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
def format(self, record):
|
def format(self, record):
|
||||||
date = datetime.utcfromtimestamp(record.created).strftime('%H:%M:%S')
|
date = datetime.utcfromtimestamp(record.created).strftime('%H:%M:%S')
|
||||||
if record.args:
|
if record.args:
|
||||||
@ -82,10 +88,23 @@ class TFWLogFormatter(Formatter):
|
|||||||
short_message = record.msg
|
short_message = record.msg
|
||||||
long_message = record.msg
|
long_message = record.msg
|
||||||
|
|
||||||
|
if record.exc_info:
|
||||||
|
current_trace = self.fetch_exception_origin(record.exc_info[2])
|
||||||
|
if current_trace != self.last_trace:
|
||||||
|
self.last_trace = current_trace
|
||||||
|
trace = '\n'+''.join(format_exception(*record.exc_info))
|
||||||
|
else:
|
||||||
|
trace = (f'\nSee previous traceback...\n'
|
||||||
|
f'{record.exc_info[0].__name__}: {record.exc_info[1]}')
|
||||||
|
else:
|
||||||
|
trace = ''
|
||||||
|
|
||||||
short_entry = (f'[{COLOR.GREY}{date}{COLOR.RESET}|>'
|
short_entry = (f'[{COLOR.GREY}{date}{COLOR.RESET}|>'
|
||||||
f'{self.severity[record.levelname]}{record.module}:'
|
f'{self.severity[record.levelname]}{record.module}:'
|
||||||
f'{record.levelname.lower()}{COLOR.RESET}] {short_message}')
|
f'{record.levelname.lower()}{COLOR.RESET}] {short_message}'
|
||||||
long_entry = f'[{date}|>{record.module}:{record.levelname.lower()}] {long_message}'
|
f'{trace}')
|
||||||
|
long_entry = (f'[{date}|>{record.module}:{record.levelname.lower()}] '
|
||||||
|
f'{long_message}{trace}')
|
||||||
return short_entry, long_entry
|
return short_entry, long_entry
|
||||||
|
|
||||||
def trim(self, value, in_dict=False):
|
def trim(self, value, in_dict=False):
|
||||||
@ -97,6 +116,10 @@ class TFWLogFormatter(Formatter):
|
|||||||
value_str = str(value)
|
value_str = str(value)
|
||||||
return value_str if len(value_str) <= 20 else f'{value_str[:20]}...'
|
return value_str if len(value_str) <= 20 else f'{value_str[:20]}...'
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def fetch_exception_origin(trace):
|
||||||
|
return deque(walk_tb(trace), maxlen=1).pop()
|
||||||
|
|
||||||
|
|
||||||
class TFWLogWhitelistFilter(Filter):
|
class TFWLogWhitelistFilter(Filter):
|
||||||
def __init__(self, names):
|
def __init__(self, names):
|
||||||
|
Loading…
Reference in New Issue
Block a user