私はこれに苦労しましたが、これを行うための「最善の」方法は1つもありません。いくつかのことを覚えておくことが重要です。
- Celery は、別の実行可能ファイルとして本番環境で実行されます。これは明らかなように思えますが、ログ ファイルを他のもの (django など) と共有するとうまくいかないことを意味します ( CELERYD_HIJACK_ROOT_LOGGERを参照)。
- 実稼働環境と開発環境の両方で同様の方法で物事を実行し続けることは非常に重要です。そのため、実稼働環境に移行したときに問題が発生することはありません ( CELERY_ALWAYS_EAGERを参照して使用してください) 。
- 設定を使用する場合、manage.py から実行すると、Celery は
settings.py
設定のためにファイルを参照します。
それを念頭に置いて、ニーズに合わせてロギングを設定することをお勧めします。まず、モジュールのログ レベルが適切に設定されていることを確認します。ロギングの設定方法については、私の他の投稿を参照してください。ここにあなたのニーズを満たすための要約版があります
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format': "[%(asctime)s] %(levelname)s [%(name)s.%(funcName)s:%(lineno)d] %(message)s",
'datefmt': "%d/%b/%Y %H:%M:%S"
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'()': 'logutils.colorize.ColorizingStreamHandler',
'formatter': 'standard',
'stream': sys.stdout
},
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'include_html': True,
},
},
'loggers': {
'django': {
'handlers': ['mail_admins'],
'propagate': True,
'level': 'ERROR',
},
'mymodule': {
'handlers': ['console', 'mail_admins'],
'propagate': True,
'level': 'DEBUG'
},
}
}
次に、このように実行します。
./manage.py celeryd --event --beat --settings=dev
これが行うことは、2 つの異なるハンドラーを設定することです。1 つ目は、DEBUG 以上のものを報告するコンソール ハンドラです。2 つ目は、ERRORS 以上のみを調べるメール ハンドラです。次は、ロガーから報告される内容です。すべての django.* ロガーは、ERROR レベルのハンドラー (mail_admins) に報告されます。そして、私たちのモジュールはいずれもプッシュ DEBUG 以上を両方に取得します。
これがあなたが求めているものだと思います。