Куда дела идут, когда я 'печатаю' их из своего приложения Django?

У меня есть приложение Django на сервере Linux. В одном из представлений, некоторой форме print команда выполняется, и некоторая строка печатается. Как я могу узнать, какова печатная строка была? Есть ли, некоторые входят в систему, которым сохранены эти вещи?

6
задан Donal Fellows 5 July 2010 в 21:46
поделиться

4 ответа

Вывод должен быть в терминале, где был запущен django. (если вы не запустили его напрямую, я не верю, что есть способ его прочитать)

Как указано в связанной ссылке, лучше не использовать print , потому что это может вызвать исключения! Но это не единственная причина: существуют модули (например, logging ), созданные для таких целей, и у них есть намного больше возможностей.

Этот сайт (даже если он относится к 2008 году) подтверждает мои утверждения:

Если вы хотите знать, что происходит внутри представления, самый быстрый способ - добавить оператор печати. Сервер разработки выводит любые операторы печати непосредственно на терминал; это серверная альтернатива JavaScript alert ().

Если вы хотите быть немного более сложным в ведении журнала, стоит обратиться к модулю ведения журнала Python (часть стандартной библиотеки). Вы можете настроить его в своем settings.py: здесь он описывает, что делать (смотрите на сайте)

Для целей отладки вы также можете включить режим отладки или использовать панель инструментов django-debug .

Надеюсь, это поможет! :)

5
ответ дан 9 December 2019 в 22:28
поделиться

Печать отлично отображается с "./manage.py runserver" или другими вариантами - как упоминает Джошуа, она отображается в терминале, с которого вы ее запустили. Если вы запускаете FCGI из cron или чего-то подобного, он просто сбрасывается в ничто, и вы полностью его теряете.

Для тех мест, где я хочу «печатать» предупреждения или уведомления, я использую экземпляр логгера python, который отправляет в syslog, чтобы захватить вывод и поместить его куда-нибудь. Я создаю экземпляр журнала в одном из модулей по мере его загрузки - models.py было местом, которое я выбрал, просто для его удобства, и я знал, что он всегда будет оцениваться до того, как поступят запросы.

import logging, logging.handlers

logger = logging.getLogger("djangosyslog")
hdlr = logging.handlers.SysLogHandler(facility=logging.handlers.SysLogHandler.LOG_DAEMON)
formatter = logging.Formatter('%(filename)s: %(levelname)s: %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)

Затем, когда вы захотите чтобы вызвать сообщение для регистратора в ваших представлениях или что-то еще:

logger = logging.getLogger("djangosyslog")
logging.warning("Protocol problem: %s", "connection reset", extra=d)

Там .error (), .critical () и другие - ознакомьтесь с http://docs.python.org/library/logging.html за мельчайшими подробностями.

Панель инструментов отладки Роба Хадсона великолепна, если вы ищете эту отладочную информацию - я сам часто использую ее при разработке. Он предоставляет вам данные о текущем запросе и ответе, включая SQL, используемый для создания любой данной страницы.Вы можете вставить в эти данные как на отпечаток, нажав на строки, которые вас интересуют в контексте / ответе, но я обнаружил, что с этим немного сложно справиться.

2
ответ дан 9 December 2019 в 22:28
поделиться

Предупреждение: если вы попытаетесь развернуть код с операторами печати под WSGI, ожидайте, что что-то сломается. Вместо этого используйте модуль регистрации.

0
ответ дан 9 December 2019 в 22:28
поделиться

Никогда не используйте print, так как после развертывания он будет печатать в stdout и WGSI сломается.

Используйте logging. Для целей разработки это очень просто настроить. В вашем проекте __init__.py:

import logging
from django.conf import settings

fmt = getattr(settings, 'LOG_FORMAT', None)
lvl = getattr(settings, 'LOG_LEVEL', logging.DEBUG)

logging.basicConfig(format=fmt, level=lvl)
logging.debug("Logging started on %s for %s" % (logging.root.name, logging.getLevelName(lvl)))

Теперь все, что вы записываете в журнал, идет на stderr, в данном случае в ваш терминал.

logging.debug("Oh hai!")

Плюс вы можете контролировать многословность в вашем settings.py с помощью параметра LOG_LEVEL.

4
ответ дан 9 December 2019 в 22:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: