誰もDjangoでを使用していますか?私はどのようにDjangoのロギング(標準ライブラリ経由で行われる)とstructlogを統合することができるコードサンプルを探しています。Djangoでのstructlogの設定と使用
私は唯一のわずかな修正を加えて、"Rendering Using structlog-based Formatters Within logging"例からコードを試してみた:
# From my settings.py, basically the same code as in the linked example
timestamper = structlog.processors.TimeStamper(fmt="%Y-%m-%d %H:%M:%S")
pre_chain = [
structlog.stdlib.add_log_level,
timestamper,
]
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"formatters": { ... }, # Exactly like in the linked example
"handlers": { ... }, # Ditto, but only "default" handler (no files)
"loggers": {
"django": {
"handlers": ["default"],
"level": "INFO",
},
# I also had "" logger here, with the same config as "django",
# but it's irrelevant for the example purposes.
}
}
# Same as in the example
structlog.configure(
processors=[
structlog.stdlib.add_log_level,
structlog.stdlib.PositionalArgumentsFormatter(),
timestamper,
structlog.processors.StackInfoRenderer(),
structlog.processors.format_exc_info,
structlog.stdlib.ProcessorFormatter.wrap_for_formatter,
],
context_class=dict,
logger_factory=structlog.stdlib.LoggerFactory(),
wrapper_class=structlog.stdlib.BoundLogger,
cache_logger_on_first_use=True,
)
はしかし、私は、ログのエラーになってしまいます。これは、私は正確に何が起こるのかを把握しようとしましたが、デバッガで私の方法を失ってしまった404
TypeError: not all arguments converted during string formatting
...
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 152, in get_response
extra={'status_code': 404, 'request': request},
Message: '\x1b[2m2017-05-08 18:34:53\x1b[0m [\x1b[33m\x1b[1mwarning \x1b[0m] \x1b[1mNot Found: /favicon.ico\x1b[0m'
Arguments: ('/favicon.ico',)
で終わる簡単なGETリクエストに何が起こるかの抜粋です。
もちろん、私はstructlog
をアプリケーションロギングに使用して、標準のライブラリロガーをそのまま使用することができます。しかし、私はすべてのログを一元化したいので、私のアプリケーションの出力は統一され、解析の準備が整います。
structlog
をDjangoに正しく統合する方法を示すコードスニペットを大変うれしく思います。
多少遅れて返信申し訳ございません。ちょうど17.2をチェックアウトし、それが問題をうまく解決することを確認できます。すべてのロギングは私が期待している通りに機能します。あなたの助けを借りて、そしてこのすばらしい図書館を作ってくれてありがとう! – drdaeman