финансовый логгер

remotes/origin/revert-6d879fe8
wad 8 years ago
parent 248c430ffa
commit 713e878a25
  1. 17
      config_app/management/commands/for_test.py
  2. 48
      finance/loggers.py
  3. 19
      lms/settings.py

@ -0,0 +1,17 @@
from django.core.management.base import BaseCommand
from finance.loggers import FinanceLogger
class Command(BaseCommand):
help = 'Команда для тестов'
def handle(self, *args, **options):
logger = FinanceLogger()
try:
10 / 0
except Exception as exc:
logger.exception('logger_yandex test log record', extra={'asdf': 3246523},
invoice_id=42, exc={'a': 1, 'b': 3, 'привет': 'медвед'}
)

@ -0,0 +1,48 @@
# -*- 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 log(self, level, msg, *args, **kwargs):
_logger.log(level=level, msg=msg, *args, **self._make_kwargs(kwargs))
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(msg, *args, **self._make_kwargs(kwargs))

@ -206,6 +206,9 @@ LOGGING = {
'format': '%(levelname)s %(asctime)s %(module)s ' 'format': '%(levelname)s %(asctime)s %(module)s '
'%(process)d %(thread)d %(message)s' '%(process)d %(thread)d %(message)s'
}, },
'finance_data_formatter': {
'format': '%(asctime)s - %(levelname)s - %(message)s - %(finance_data)s'
},
}, },
'handlers': { 'handlers': {
'sentry': { 'sentry': {
@ -213,15 +216,17 @@ LOGGING = {
'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler', 'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
'tags': {'custom-tag': 'x'}, 'tags': {'custom-tag': 'x'},
}, },
'yandex_money': { 'finance_data': {
'level': 'DEBUG', 'level': 'DEBUG',
'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler', 'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
'tags': {'custom-tag': 'yandex'}, 'tags': {'custom-tag': 'yandex'}, # TODO переделать на finance_data
}, },
'yandex_money_file': { 'finance_data_file': {
'level': 'INFO', 'level': 'INFO',
'class': 'logging.FileHandler', 'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(BASE_DIR, 'logs', 'yandex_money.log'), 'filename': os.path.join(BASE_DIR, 'logs', 'finance_data.log'),
'maxBytes': 1024 * 1024 * 10,
'formatter': 'finance_data_formatter'
}, },
'business_rules': { 'business_rules': {
'level': 'DEBUG', 'level': 'DEBUG',
@ -239,8 +244,8 @@ LOGGING = {
'level': 'WARNING', 'level': 'WARNING',
'handlers': ['sentry'], 'handlers': ['sentry'],
}, },
'yandex_money': { 'finance_data': {
'handlers': ['yandex_money', 'yandex_money_file', ], 'handlers': ['finance_data', 'finance_data_file', ],
'level': 'DEBUG', 'level': 'DEBUG',
'propagate': False 'propagate': False
}, },

Loading…
Cancel
Save