Похоже, вы не разместили всю необходимую информацию - например, где находится файл конфигурации вашего журнала?
Вы говорите, что:
При выполнении того же кода в
shell, или в django с сервером запуска
команда или с mod_wsgi, поведение
правильно
Вы не ясно, является ли вывод журнала, который вы показали, из одной из этих сред, или из запуска mod_python. Это не выглядит неправильно - в своем коде вы добавили обработчики в корень, а не в logger 'site-errors'. Вы также устанавливаете уровень для обработчика, а не для регистратора - так что вы не ожидаете увидеть уровень, установленный для регистратора 'site-errors', в выводе журнала, не так ли? Уровни могут быть установлены как в регистраторах, так и в обработчиках, и они не одинаковы, хотя они отфильтровывают события одинаковым образом.
Проблема с пользовательскими обработчиками легко объяснима, если вы посмотрите документацию регистрации для конфигурации, см.
http://docs.python.org/library/logging.html (поиск "указывается в записи класса")
Это объясняет, что любой класс обработчика, описанный в файле конфигурации, является eval () d в пространстве имен пакетов журналирования. Таким образом, связывая logging.custhandlers с вашим модулем пользовательских обработчиков, а затем указав «custhandlers.MyCustomClass» в файле конфигурации, eval () дает ожидаемый результат. С таким же успехом вы могли бы сделать
logging.sitemonitoring = мониторинг сайта
и указал класс обработчика как
sitemonitoring.db_log_handler.DBLogHandler
, который будет работать так же хорошо (если подпакет db_log_handler уже был импортирован).
Кстати, причина, по которой у людей иногда возникают проблемы с настройкой входа в файл settings.py, связана с магией импорта Django, вызывающей проблемы кругового импорта. Я обычно настраиваю регистрацию в settings.py, и она работает нормально, если вы не хотите импортировать определенные биты Django (например, в django.db - поскольку логика импорта приложения находится в django.db, вы можете столкнуться с проблемами кругового импорта, если попытаетесь импортировать django.db.x в settings.py).