Как постоянно обновлять файл журнала, исключая ответное сообщение консоли сервера django, используя модуль регистрации? - PullRequest
0 голосов
/ 07 июня 2018

Я новичок в модуле регистрации.Я хочу знать, что, как постоянно обновлять файл журнала, исключая ответное сообщение, как 2018-06-07 11:33:22,330|INFO|"POST /MyProject/ HTTP/1.1" 200 36.

settings.py

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'standard': {
            'format': '%(asctime)s|%(levelname)s|%(message)s'
        }
    },
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': "logging.handlers.RotatingFileHandler",
            'formatter': 'standard',
            'filename': "C:\\ProgramData\\PROGRAMX\\Logs\\PROGRAMX_logs_%s.txt" % (datetime.today().strftime("%Y_%m_%d"))
        }
    },
    'loggers': {
        'django': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
            'format': '%(asctime)s|%(levelname)s|%(message)s'
        }
    }
}

Я обновляю журнал в Django, как,

import logging
log = logging.getLogger('django')
log.error("Internal Error: X happened.")

Я хочу завершить двазадачи: 1.Обновите файл журнала сразу после обработки запроса. 2.В лог-файл я не хочу добавлять сообщения типа "POST /MyProject/ HTTP/1.1" 200 36.

PROGRAMX_logs_2018_06_07.txt

2018-06-07 11:33:14,317|ERROR|Internal Error: X happened.
2018-06-07 11:33:14,319|INFO|"POST /MyProject/ HTTP/1.1" 200 36
2018-06-07 11:33:22,327|ERROR|Internal Error: X happened.
2018-06-07 11:33:22,330|INFO|"POST /MyProject/ HTTP/1.1" 200 36

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Напишите сценарий пользовательского фильтра журналирования, который отфильтрует все, что вам нужно, и добавит его в настройки журналирования.

Перейдите по ссылке ниже, чтобы добавить пользовательский фильтр в ваш django settings.py

https://docs.djangoproject.com/en/2.0/topics/logging/#examples

Нижеприведенный сценарий позволяет регистрировать только сообщения уровня INFO.

#bar.py

import logging

class InfoFilter(logging.Filter):
    def filter(self, record):
        return record.levelno == logging.INFO

Вы также можете использовать record.name для дальнейшей фильтрации на основе ваших потребностей.

вам нужно добавить фильтр в ваши настройки:

settings.py

LOGGING={
  'version': 1,
  'disable_existing_loggers': False,
  'formatters': {
    'standard': {
      'format': '%(asctime)s|%(levelname)s|%(message)s'
    }
  },
  'filters': {
    'special': {
      '()': 'Foo.bar',       
     }
   },
  'handlers': {
    'file': {
      'level': 'DEBUG',
      'class': "logging.handlers.RotatingFileHandler",
      'formatter': 'standard',
      'filters': ['special'],
      'filename': "C:\\ProgramData\\PROGRAMX\\Logs\\PROGRAMX_logs_%s.txt"%(datetime.today().strftime("%Y_%m_%d"))
    }
  },
  'loggers': {
    'django': {
      'handlers': [
        'file'
      ],
      'level': 'DEBUG',
      'propagate': True,
      'format': '%(asctime)s|%(levelname)s|%(message)s'
    }
  }
}
0 голосов
/ 07 июня 2018

В настройках, где написано 'level': 'DEBUG' измените его на 'level': 'ERROR'.

Эта страница должна объяснить больше.

...