Как я могу использовать собственный обработчик журналов с django? - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь объединить ведение журнала с loki в моем приложении django следующим образом:

handler = logging_loki.LokiHandler(
    url="http://localhost:3100/loki/api/v1/push",
    tags={"app": "django", "env": ENV},
    version="1",
)

LOGGING = {
      'version': 1,
      'disable_existing_loggers': False,
      'formatters': {
       'standard': {
        'format': '[%(asctime)s] {%(module)s} [%(levelname)s] - %(message)s',
        'datefmt': '%d-%m-%Y %H:%M:%S'
    },
},
'handlers': {
    'console': {
        'level': 'INFO',
        'class': 'logging.StreamHandler',
        'formatter': 'standard',
    }
},
'loggers': {
    '': {
        'handlers': ['console', handler], # this doesnt work
        'level': 'DEBUG',
        'propagate': True,
        # 'name': ENV
    }
}
}

Что мне нужно изменить, чтобы django использовал этот пользовательский обработчик? Я попытался просто сослаться на объект обработчика в журнале, но это не должно было быть правильным подходом.

Я также попробовал это:

LOGGING_CONFIG = None
logging.config.dictConfig(LOGGING)
logging.getLogger(__name__).addHandler(handler)

, но это не отправляет логи в loki

1 Ответ

1 голос
/ 12 февраля 2020

Попробуйте это:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'standard': {
            'format': '[%(asctime)s] {%(module)s} [%(levelname)s] - %(message)s',
            'datefmt': '%d-%m-%Y %H:%M:%S'
        },
    },
    'handlers': {
        'console': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'formatter': 'standard',
        },
        'loki': {
            'level': 'INFO',
            'class': 'logging_loki.LokiHandler',
            'url': "http://localhost:3100/loki/api/v1/push",
            'tags' {"app": "django", "env": ENV},
            'version': "1",
        },
    },
    'loggers': {
        '': {
            'handlers': ['console', 'loki'],
            'level': 'DEBUG',
            'propagate': True,
        }
    }
}

В частности, вам необходимо:

  1. Определить ваш обработчик в словаре handlers в настройке LOGGING. Конфигурация здесь используется для указания аргументов инициализации для обработчика.

  2. Затем назначьте этот обработчик, используя его ключ (loki в примере, который я дал выше) для регистратора ( s) вы хотите, чтобы он справился.

...