Skip to content

Instantly share code, notes, and snippets.

@isdyy
Last active December 15, 2015 14:39
Show Gist options
  • Save isdyy/5276553 to your computer and use it in GitHub Desktop.
Save isdyy/5276553 to your computer and use it in GitHub Desktop.
python の logging に関するメモ

Logging Flow

忘れてしまいがち

Adding contextual information

  • http://docs.python.org/2/howto/logging-cookbook.html#adding-contextual-information-to-your-logging-output
  • http://docs.python.org/3/howto/logging-cookbook.html#adding-contextual-information-to-your-logging-output
  • webアプリケーションのログにリクエストユーザーの情報を含める等
  • LoggerAdapter を使って logger をラップする方法(>= 2.6) と、Filter を作って Logger または Handler に仕掛けておく方法がある
  • Filter を使うと、既存のアプリケーションコードに一切変更をせず、また新たなコーディング上のルール等も作らずに、ログに情報を付加できる
    • Filter のサブクラスを作って、サイトグローバルな logging設定や WSGIミドルウェアを通じて設定する
  • Adapter は特定モジュール/パッケージ内で固有の処理をするときには良さげな感じ
    • 予め Adapterでラップした特定の logger インスタンスの使用を義務付けられる範囲で
  • もしくは logging.setLoggerClass でLogger じたいを独自のものに置き換えることもできる
    • python2 で 3系の logging.setLogRecordFactory() 相当のことをするには Logger を継承して makeRecord() を override するしかないか

ローカルファイルへの出力でローテーションに対応するには

  • 出力先ファイルパスは一定で、logrotate でローテーションするケース
    • logging.handlers.WatchedFileHandler というのがあるのでこれを使う
    • 引数は FileHandler と同じ
  • logging じたいにも日時やサイズに応じてローテーションさせるハンドラが用意されてはいる (RotatingFileHandler)

GAE/Python のログ

  • google.appengine.api.app_logging.AppLogsHandler というのがセットされてる
  • デプロイ環境だと google3.apphosting.api.app_logging.AppLogsHandler となっている
    • 1メッセージあたり 8192 bytes で truncate される
  • emit先は GAE のログストレージ
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment