私の環境で歩哨が動作するようになり、ログを微調整してエラーメールの送信を停止しようとしましたが、それでも動作し、理由がわかりません。私のログ設定は:
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"verbose": {
"format": '%(levelname)s %(asctime)s (%(pathname)s %(funcName)s): "%(message)s"'
},
"simple": {"format": "%(levelname)s %(message)s"},
"Django.server": {
"()": "Django.utils.log.ServerFormatter",
"format": "[%(server_time)s] %(message)s",
},
},
"handlers": {
"null": {"level": "DEBUG", "class": "logging.NullHandler",},
"console": {
"level": "DEBUG",
"class": "logging.StreamHandler",
"formatter": "simple",
},
"log_file": {
"level": "DEBUG",
"class": "logging.handlers.RotatingFileHandler",
"filename": "/var/log/courtlistener/Django.log",
"maxBytes": "16777216", # 16 megabytes
"formatter": "verbose",
},
"Django.server": {
"level": "INFO",
"class": "logging.StreamHandler",
"formatter": "Django.server",
},
},
"loggers": {
# Disable SuspiciousOperation.DisallowedHost exception ("Invalid
# HTTP_Host" header messages.) This appears to be caused by clients that
# don't support SNI, and which are browsing to other domains on the
# server. The most relevant bad client is the googlebot.
"Django.security.DisallowedHost": {
"handlers": ["null"],
"propagate": False,
},
"Django.server": {
"handlers": ["Django.server"],
"level": "INFO",
"propagate": False,
},
# This is the one that's used practically everywhere in the code.
"cl": {"handlers": ["log_file"], "level": "INFO", "propagate": True,},
},
}
ここに欠けている部分はありますか?どのようにしてメールが送信されるかはわかりません。考慮すべき別の構成変数はありますか?
[〜#〜] update [〜#〜]:私が気づいたことの1つは、plaintextエラーメールを受け取ることです今私が使っていたHTMLのものの代わりに。これはロギング設定を微調整したときに変更されましたが、なぜそれをググリングしても何も明らかにならないようです。
あなたのLOGGING
設定は私にはよく見えます(ほとんど、最後を参照してください)。他にも考えられることがいくつかあります。
変更を加えた可能性がありますが、すべての場所ではありません。他のアプリ、セロリプロセス、ステージングデプロイなどを、忘れていた場所で実行している可能性があります。
おそらく別の何か(何なのかわからない...)がこのロギングハンドラーを構成しています。この場合は、既存のロガーを無効にすることができます。
LOGGING = {
"disable_existing_loggers": True,
...
}
これはあまり良い考えではありませんが、他の人のロガーを無効にするので、別の方法で無効にすることができます。
ADMINS
設定は、エラーの送信先の電子メールアドレスを定義するので、これを空のリストに設定するだけで無効にすることができます。
ADMINS = []
エラーメールの送信のみがこの設定に使用されるため、これは比較的安全です。ユーザーまたはサードパーティのアプリが使用している場合を除きます。
サーバーエラーではなく404エラーのメールを送信することもできます。 MIDDLEWARE
にBrokenLinkEmailsMiddleware
が含まれていないことを確認してください。これにはADMINS
にも同様の設定がありますが、これはMANAGERS
と呼ばれます。
MANAGERS = []
独自のLOGGING
dictを作成するときに何かを見逃していないことを確認するために default logging config も確認する必要があります。
もう1つ気づいたのは、LOGGING
の構成をプロジェクトに接続すると、maxBytes
の値が整数ではなく整数になるため、構成が正しく解析されないことです。ストリング。だからあなたも変更してみることができます:
"log_file": {
"level": "DEBUG",
"class": "logging.handlers.RotatingFileHandler",
"filename": "/var/log/courtlistener/Django.log",
"maxBytes": "16777216", # 16 megabytes
"formatter": "verbose",
}
に:
"log_file": {
"level": "DEBUG",
"class": "logging.handlers.RotatingFileHandler",
"filename": "/var/log/courtlistener/Django.log",
"maxBytes": 16777216, # 16 megabytes
"formatter": "verbose",
}