Ответ 1
Вы можете использовать logging.basicConfig
для определения интерфейса по умолчанию, доступного через logging
, следующим образом:
import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(name)s.%(funcName)s +%(lineno)s: %(levelname)-8s [%(process)d] %(message)s',
)
Это определение теперь будет использоваться всякий раз, когда вы выполняете следующее в своем приложении:
import logging
logging.error(...)
Пока __name__
недоступен, эквивалентные (и другие параметры) доступны с помощью атрибутов LogRecord
, которые можно использовать для форматирования строки ошибок - включая module
, filename
и pathname
. Ниже приведена двух- script демонстрация этого в действии:
scripta.py
import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(module)s %(name)s.%(funcName)s +%(lineno)s: %(levelname)-8s [%(process)d] %(message)s',
)
from scriptb import my_view
my_view()
scriptb.py
import logging
def my_view():
# Log an error message
logging.error('Something went wrong!')
Определение регистрации определено в scripta.py
с добавленным параметром module
. В scriptb.py
нам просто нужно импортировать logging
, чтобы получить доступ к указанному по умолчанию. При запуске scripta.py
создается следующий вывод:
2016-01-14 13:22:24,640 scriptb root.my_view +9: ERROR [14144] Something went wrong!
Что показывает модуль (scriptb
), где регистрируется ошибка.
В соответствии с этим ответом вы можете продолжать использовать любую конфигурацию записи из Django на каждом модуле, отключив обработку Django и настроив корневой обработчик следующим образом:
# settings.py - django config
LOGGING_CONFIG = None # disables Django handling of logging
LOGGING = {...} # your standard Django logging configuration
import logging.config
logging.config.dictConfig(LOGGING)