2012-03-09 4 views
10

У меня есть приложение с именем main в моем проекте Django. Это приложение имеет несколько команд управления, которые я хочу войти, но ничего не отображается в стандартном выводе со следующей конфигурацией: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.

+0

какой команды вы используете для входа выхода? – second

+0

Я пробовал 'logging.info' и' logging.debug', но ни один из них не работает. После написания этого вопроса я заметил, что 'logging.warn' * does * дает мне печать для stdout. – damd

ответ

12

вам нужно пространство имен вашего регистратора. В настоящее время вы регистрируете в корневом регистратор, который не перехватывается обработчиком, который ищет main

, а не logging.debug("message"), вы хотите

logger = logging.getLogger('main') 
logger.debug("message") 
1

Установка «поток» на 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, 
     } 
    } 
} 
+0

Я попытался скопировать вставший ваш пример кода дословно, но все равно, я ничего не получаю в stdout. * Однако *, когда я вставляю 'logging.warn ('foo')' в качестве первого оператора, я получаю отпечаток в stdout. 'logging.info' и' logging.debug' все еще не работают. – damd

-2

Если вы регистрируете эти пользовательские команды с хрон, вы можете «сила» каротаж, просто перенаправлять вывод в текстовый файл.

* 12 * * * python /path/to/my/custom/command.py >> /path/to/my/logfile.txt 

Это будет работать хрон в 12 утра каждое утро, и все, что направлено на стандартный вывод (например, заявления питона печати) будут сброшены в этот текстовый файл, сцепляются на любой существующий текст в лог-файл.

Если вы не используете cron, просто создайте один сценарий оболочки, который запускает все сценарии, которые нужно запустить, и вручную направлять их в нужные файлы журнала.

python /path/to/my/custom/command.py >> /path/to/my/logfile.txt 

... и так далее.

+0

Спасибо, но это метод, который я использовал раньше. Я пытаюсь сделать все правильно и использовать Django «встроенные» возможности ведения журнала, если это возможно. – damd

+0

Достаточно честный. Надеюсь, кто-то вступит и поможет вам в этом; Я примитивен и использую перенаправление оболочки. :) – patrickn

Смежные вопросы