Djangoのログ記録に問題があります。私はロギングに関するPythonとDjangoの両方のドキュメントを読みましたが、私が間違っていることはまだ分かりません。このDjangoロギングはなぜ機能しないのですか?
# demo/views.py
import logging
logger = logging.getLogger(__name__)
def demo_logging(request, template):
logger.error("Got some error")
return render(request, template)
ジャンゴ/ utilsパッケージに指定されている、私はDjangoのデフォルトのロギングの設定を使用しています:起動するには、私はちょうど私のDjangoの開発サーバは、私はこの単純なビューを実行したときに実行されているコンソールにメッセージをログに記録しようとしています私の設定ファイル内の/log.py私は(たぶん)(明らかに、私はそうでない、)起こって正確に何を知っているように:
# settings.py
DEBUG = True
...
LOGGING_CONFIG = None
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse',
},
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
'handlers': {
'console': {
'level': 'INFO',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
},
'null': {
'class': 'logging.NullHandler',
},
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
}
},
'loggers': {
'django': {
'handlers': ['console'],
},
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': False,
},
'django.security': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': False,
},
'py.warnings': {
'handlers': ['console'],
},
}
}
import logging.config
logging.config.dictConfig(LOGGING)
私はビューを実行すると、私はコンソールに何も表示されません。メッセージを除き、
No handlers could be found for logger "demo.views"
私は何が間違っているのか分かりません。私は、logger.errorの呼び出しは、定義されているコンソールハンドラにリンクされているdjangoのロガーに衝突すると思います。
ありがとうございました。
FOLLOW UP 私は、デフォルトを追加することによって、「__name__」引数を使用してロガーを作成するときにトリガーされる「キャッチオール」ロガー、この問題を解決:logger = logging.getLogger(__name__)
を呼び出すと、原因
'loggers': {
'': {
'handlers': ['console'],
},
...
これは本当です。しかし、私が発見したより良いアプローチは、上記のようにデフォルトのロガーを追加することです。 Djangoのdocの例では、ロガーを指定するときに "\ _ \ _ name \ _ \ _"を使用することが示されているので、デフォルトの「catch-all」ロガーの作成について議論すると思います。 – William
はい私はあなたに同意し、なぜドキュメントにそのことが言及されていないのか、なぜ「キャッチオール」ロガーがデフォルトで追加されたのか不思議に思っています。 – rafalmp