You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.8 KiB
56 lines
1.8 KiB
# -*- coding: utf-8 -*-
|
|
|
|
import logging
|
|
|
|
_logger = logging.getLogger('finance_data')
|
|
|
|
|
|
class FinanceLogger:
|
|
"""
|
|
Все kwargs попадют в %(finance_data)s и логируются
|
|
'format': '%(asctime)s - %(levelname)s - %(message)s - %(finance_data)s'
|
|
"""
|
|
|
|
def __init__(self, prefix=None):
|
|
self.prefix = prefix
|
|
|
|
def log(self, level, msg, *args, **kwargs):
|
|
_logger.log(level=level, msg=self._get_msg(msg), *args, **self._make_kwargs(kwargs))
|
|
|
|
def _get_msg(self, msg):
|
|
if self.prefix:
|
|
msg = '{}: {}'.format(self.prefix, msg)
|
|
return msg
|
|
|
|
def _make_kwargs(self, kwargs):
|
|
new_kwargs = {}
|
|
for inspected_kwarg in ('exc_info', 'stack_info', 'extra'):
|
|
try:
|
|
new_kwargs[inspected_kwarg] = kwargs.pop(inspected_kwarg)
|
|
except KeyError:
|
|
pass
|
|
if 'extra' in new_kwargs:
|
|
new_kwargs['extra']['finance_data'] = kwargs
|
|
else:
|
|
new_kwargs['extra'] = dict(finance_data=kwargs)
|
|
return new_kwargs
|
|
|
|
def debug(self, msg, *args, **kwargs):
|
|
self.log(level=logging.DEBUG, msg=msg, *args, **kwargs)
|
|
|
|
def info(self, msg, *args, **kwargs):
|
|
self.log(level=logging.INFO, msg=msg, *args, **kwargs)
|
|
|
|
def warning(self, msg, *args, **kwargs):
|
|
self.log(level=logging.WARNING, msg=msg, *args, **kwargs)
|
|
|
|
# TODO отделить логирование ошибок в другой лог
|
|
def error(self, msg, *args, **kwargs):
|
|
self.log(level=logging.ERROR, msg=msg, *args, **kwargs)
|
|
|
|
def critical(self, msg, *args, **kwargs):
|
|
self.log(level=logging.CRITICAL, msg=msg, *args, **kwargs)
|
|
|
|
def exception(self, msg, *args, **kwargs):
|
|
kwargs['stack_info'] = True
|
|
_logger.exception(self._get_msg(msg), *args, **self._make_kwargs(kwargs))
|
|
|