This commit is contained in:
Artem Tsyrulnikov
2025-11-08 16:16:04 +03:00
commit 3800c72662
36 changed files with 2136 additions and 0 deletions

View File

@@ -0,0 +1,54 @@
import json
import logging
from datetime import UTC, datetime
class JSONFormatter(logging.Formatter):
def format(self, record: logging.LogRecord) -> str:
log_data = {
'timestamp': datetime.fromtimestamp(record.created, UTC).isoformat(),
'level': record.levelname,
'message': record.getMessage(),
'module': record.module,
'package': record.name,
'app_name': record.app_name,
'app_version': record.app_version,
}
if record.levelno >= logging.ERROR:
log_data['location'] = f'{record.pathname}:{record.lineno}'
if record.exc_info:
log_data['error_type'] = record.exc_info[0].__name__
log_data['error_message'] = str(record.exc_info[1])
log_data['traceback'] = self.formatException(record.exc_info)
for key, value in record.__dict__.items():
if key not in {
'name',
'msg',
'args',
'created',
'filename',
'funcName',
'levelname',
'levelno',
'lineno',
'module',
'msecs',
'message',
'pathname',
'process',
'processName',
'relativeCreated',
'thread',
'threadName',
'exc_info',
'exc_text',
'stack_info',
'app_name',
'app_version',
}:
log_data[key] = value
return json.dumps(log_data, ensure_ascii=False)