Django протоколирование пользовательских команд управления
У меня есть приложение с именем main
в моем проекте Django. Это приложение имеет несколько команд управления, которые я хочу зарегистрировать, но ничего не отображается в стандартном режиме со следующей конфигурацией:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'log_to_stdout': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'stream': sys.stdout,
},
},
'loggers': {
'main': {
'handlers': ['log_to_stdout'],
'level': 'DEBUG',
'propagate': True,
}
}
}
Что я делаю неправильно? Я попытался использовать my_project.main
, но это тоже не сработало. Я использую финальную версию 1.3.0.
Ответы
Ответ 1
вам нужно пространство имен для вашего регистратора. в настоящее время вы регистрируетесь в корневом журнале, который не улавливается вашим обработчиком, который ищет main
а не logging.debug("message")
, вы хотите
logger = logging.getLogger('main')
logger.debug("message")
Ответ 2
Установка "потока" на sys.stdout не требуется. Однако вы должны определить форматтер:
Пример:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'handlers': {
'log_to_stdout': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'simple',
},
},
'loggers': {
'main': {
'handlers': ['log_to_stdout'],
'level': 'DEBUG',
'propagate': True,
}
}
}
Ответ 3
Если вы регистрируете эти пользовательские команды с помощью cron, вы можете "принудительно" вести журнал, просто перенаправляя вывод в текстовый файл.
* 12 * * * python /path/to/my/custom/command.py >> /path/to/my/logfile.txt
Это будет выполнять задание cron в 12 утра каждое утро, и все, что направлено на stdout (например, инструкции печати python), будет сбрасываться в этот текстовый файл, объединенный с любым существующим текстом в файле журнала.
Если вы не используете cron, просто создайте единую оболочку script, которая запускает все сценарии, которые нужно запустить, и вручную направьте их в нужные файлы журнала.
python /path/to/my/custom/command.py >> /path/to/my/logfile.txt
... и т.д.