私たちはサーバー上でmod_pythonを使用しているときに、Pythonロギングモジュールが異なる動作をしているという厄介な問題があります。シェル、またはジャンゴでのrunserverコマンドまたはmod_wsgiを有する同じコードを実行する場合、動作は正しい:mod_pythonを使用したときのPythonロギングモジュールの動作が異なります
import logging
logger = logging.getLogger('site-errors')
logging.debug('logger=%s' % (logger.__dict__))
logging.debug('logger.parent=%s' % (logger.parent.__dict__))
logger.error('some message that is not logged.')
我々は、次のロギング:
2009-05-28 10 :36:43,740、DEBUG、error_middleware.py:31、[logger = {'name': 'サイトエラー'、 '親' :0、 '無効':0、 'manager':< logging.Managerインスタンス0x85f8aec >、 'propagate':1、 'filters':[]}]
2009-05-28 DEBUG、error_middleware.py:32、[logger.parent = {'name': 'ルート'、 '親':なし 'ハンドラ': [< 10、 '無効': 0x8ec612c >、0x8ec616c >で < logging.handlers.RotatingFileHandlerインスタンス]、 'レベル' でインスタンス.StreamHandler 0、 '伝播':1、 'フィルタ':[]}]
このように、子ロガーの「サイトエラー」に対してハンドラまたはレベルは設定されていません。
ロギング設定がsettings.pyで行われます。
MONITOR_LOGGING_CONFIG = ROOT + 'error_monitor_logging.conf'
import logging
import logging.config
logging.config.fileConfig(MONITOR_LOGGING_CONFIG)
if CONFIG == CONFIG_DEV:
DB_LOGLEVEL = logging.INFO
else:
DB_LOGLEVEL = logging.WARNING
は、第二の問題は、我々はまた、そのフォルダ内のerror_middleware.pyとして存在__init__.pyでカスタムハンドラを追加することである。
import logging
from django.conf import settings
from db_log_handler import DBLogHandler
handler = DBLogHandler()
handler.setLevel(settings.DB_LOGLEVEL)
logging.root.addHandler(handler)
カスタムハンドラはログに記録されません!
誰かが問題の原因を知っている場合は、お知らせください。別の情報を求めていることをためらってはいけません。それは確かに問題を解決するのに役立ちます。
+1 to mod_wsgi。 wsgiアプリケーションとは、他のサーバーソフトウェアにデプロイできることを意味し、mod_pythonは特に嫌です。 – nosklo