2017-05-08 63 views
0

誰も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に正しく統合する方法を示すコードスニペットを大変うれしく思います。

答えて

2

すぐにリリースされるべきstructlog 17.2で修正される可能性が高いこのバグは、https://github.com/hynek/structlog/pull/117です(あなたの問題が解決したらコメントしてみたり、試してみてください)。

+0

多少遅れて返信申し訳ございません。ちょうど17.2をチェックアウトし、それが問題をうまく解決することを確認できます。すべてのロギングは私が期待している通りに機能します。あなたの助けを借りて、そしてこのすばらしい図書館を作ってくれてありがとう! – drdaeman

関連する問題