Python での Log 収集
プロジェクトが大きくなるにつれて、プログラムの不備を見つけるのにログの構成、ログデザインを考えることが重要になってくる。上手なログの書き方を覚えれば、プリントデバッグがとても用意になるので、習慣づける価値はある。
システムトレードの取引をしていると、サーバーの遅延や分散処理による非同期処理が増えて全体としてのフローが複雑になって、取引残高がずれた時の原因究明が容易ではなくなっていく。その時に、ログを上手に使ってトラッキングできるようにしておくと、不具合が起こった時の対処が楽になる。
目次
Logging Module
LogBook
- mitsuhiko (Flaskの開発者) が開発にいた
- スター数一位
- 追加の情報や、logをサーバーに収集させる機能が標準で備わってる
- 他の主要ライブラリで使われていない
- logging との親和性は悪そう?
structlog
- 変数の確認に使いやすくなっている。
- ターミナルに色付けできる
logzero
- 色をつける
- FileRatation
- unicode
- logging との親和性高め
logzero を使うことにする
基本的には標準のloggingを用いて、拡張機能を利用したい時だけlogzeroを使うという形が取れるのがlogzeroのメリット。
logging を使う上でのお勧め機能
Formatter を定義
呼び出し元のファイルや行数までログに出力できる。
お勧め Format 設定
1 |
"%(color)s%(asctime)s-%(threadName)s|%(filename)s:%(lineno)d|%(levelname)-7s%(end_color)s : %(message)s" |
同一テキストの書き出しを行っても、呼び出し元が違うことが分かるだけで十分なヒントになる。
color
というのは、 logzero.LogFormatter
独自のもの。
必要に応じてここからパラメータを引っ張ると良い
stdout と stderr も出力させる
stderr で落ちたときの処理もpython側でloggingに流せるようにしたい。
ライブラリ化してみた。
logging の設定が終わったあとに下記を追加するだけ。
1 2 |
import stdlogging stdlogging.enable() |
これで、terminalでログの確認をしなくて良くなる。
Logging Config File
ファイルからLOGLEVELの設定を行えるようにする。
ログ用サーバー
- Elasticsearch
- LogStash
ネットワークを使ったログ収集で、これらを使うと統計情報の利用などの連携ソフトが使いやすくなるが、個人的にはそこまでの必要は今のところない。
LogViewer
SnakeTail
- 一致するものに色をつけることができるなど大体の要望は満たす。
- ただ、表示するものをフィルタリングで選べない(DEBUGは表示しないなど)
サンプルコード
1 |
pip install stdlogging logzero |
必要モジュールをインストール。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import logging import logzero import time import threading import stdlogging from logzero import logger def test_log(logger): logger.error("log from thread") if __name__ == '__main__': formatter = logzero.LogFormatter( fmt="%(color)s%(asctime)s-%(threadName)s|%(filename)s:%(lineno)d|%(levelname)-7s%(end_color)s : %(message)s", datefmt=None) logging.basicConfig(level=logging.DEBUG) root_logger = logging.getLogger() handler = root_logger.handlers[0] handler.setFormatter(formatter) logging.info("log") threading.current_thread().name = 'LogMain' logger = logzero.setup_logger(formatter=formatter) logger.debug("hello") logger.info("info") logger.warn("warn") logger.error("error") t = threading.Thread(target=test_log, args=(logger,), name="LogThread") t.start() t.join() stdlogging.enable() print "test comment" raise RuntimeError("Runtime Error") |



About Fx-Kirin
2009年10月にFXを開始、翌年2010年5月から脱サラをしてFX業界に専念。 2012年10月頃から本格的に勝ち始め、一月で資産を倍にする、2年半月間負けなし等、安定した収支で2013年11月に生涯FX収支が1億を超える。 投資スタイルはシステムトレード。プログラミングの知識がほぼない状態から、独学で自分がしたいと思うことであればほぼ実現することが可能なレベルまで成長。好きな言語はRuby, Python。必要となればC++からVBA、Pascal等なんでも行う。MT4/MT5のプログラミングも得意。 2011年にはFXで稼いだ資金をもとにシンガポールに移住し、留学も兼ねて起業をチャレンジするほど、ビジネスを興すことに熱意がある。国内の業者を主に使い始めたことから、2012年に帰国。零細株式会社経営中。
- Web |
- More Posts (410)
Adsense
関連記事
-
-
ctypes で c_char array を c_char_p に変換する
なかなか情報がなかったのでメモ書き。
-
-
Interactive Brokers 証券の Python API を利用する
Interactive Brokers 証券とは 日本には珍しく自動売買プラットフォームが提供されいてる証券会社です。
-
-
Python Mock で オリジナルのインスタンメソッドのを呼びたい時
autospec と sideeffect を組み合わせるのが解決策だった。
-
-
PYPIへの登録を10秒でできるようになる方法
pip 使ってますよね Pythonを使っている人であれば、pip installでライブラリをインストールするこ
-
-
stop automatically closeing vim-ipython output with jedi-vim
Even though I commented out the following code in vim_ipytho
-
-
Python 2, Python 3 で更新したファイルを調べてreloadするパッケージを作った。
pdbでのデバッグにはreload機能がない IPythonには優秀なautorelaod機能がマジックコマンドで
-
-
Python requests に DefaultTimeout を設定する
Pythonコード 参考リンク [bm url="https://stackoverflow.com/quest
-
-
joblib によって謎のバグが起こる
joblib 0.14.1 にて確認.0.13.2 だと起こらない.import joblib を消すと正常に動く.
-
-
絶対ダメ! マルチスレッドでの共通変数のインクリメント演算
デバッグ中の発見 とあるマルチスレッドプログラムをPythonで書いていた際に遭遇した誤使用です。C/C++等
-
-
Derivatives analytics with Python の学習ノート 1,2章
洋書を読んでいると、いつも読んだ気になってちゃんと理解出来てるか自信がないことが多いので、チャプターごとに要点をまとめ
Adsense
NEW ENTRY
-
- Linux Mint 20 での日本語の設定について。
フォントの設定とかはいろいろなところで触れられているので、他にない情報だけ。 TL;DR F
-
- joblib によって謎のバグが起こる
joblib 0.14.1 にて確認.0.13.2 だと起こらない.import joblib を消
-
- Fixing kernel error AMD-Vi: Event logged IO_PAGE_FAULT on Ryzen Machine
My pc was periodically shut down on 7:40 am JS
-
- Ubuntu で仮想ディスプレイを使う
雑多な備忘録ですが、せっかくなので残しておきます。 Ubuntu 18.04 の resolv.c
-
- PYPIへの登録を10秒でできるようになる方法
pip 使ってますよね Pythonを使っている人であれば、pip installでライブラリ
Twitter
RSS
カテゴリー
-
人気記事一覧