Wizard In The Market
システムトレードの魔術師

*

Python での Log 収集

公開日: : Python , , ,

プロジェクトが大きくなるにつれて、プログラムの不備を見つけるのにログの構成、ログデザインを考えることが重要になってくる。上手なログの書き方を覚えれば、プリントデバッグがとても用意になるので、習慣づける価値はある。

システムトレードの取引をしていると、サーバーの遅延や分散処理による非同期処理が増えて全体としてのフローが複雑になって、取引残高がずれた時の原因究明が容易ではなくなっていく。その時に、ログを上手に使ってトラッキングできるようにしておくと、不具合が起こった時の対処が楽になる。

Logging Module

LogBook

  • mitsuhiko (Flaskの開発者) が開発にいた
  • スター数一位
  • 追加の情報や、logをサーバーに収集させる機能が標準で備わってる
    • 他の主要ライブラリで使われていない
    • logging との親和性は悪そう?

structlog

  • 変数の確認に使いやすくなっている。
  • ターミナルに色付けできる

logzero

  • 色をつける
  • FileRatation
  • unicode
  • logging との親和性高め

logzero を使うことにする

基本的には標準のloggingを用いて、拡張機能を利用したい時だけlogzeroを使うという形が取れるのがlogzeroのメリット。

logging を使う上でのお勧め機能

Formatter を定義

呼び出し元のファイルや行数までログに出力できる。

お勧め Format 設定

同一テキストの書き出しを行っても、呼び出し元が違うことが分かるだけで十分なヒントになる。

colorというのは、 logzero.LogFormatter独自のもの。

必要に応じてここからパラメータを引っ張ると良い

stdout と stderr も出力させる

stderr で落ちたときの処理もpython側でloggingに流せるようにしたい。

ライブラリ化してみた。

logging の設定が終わったあとに下記を追加するだけ。

これで、terminalでログの確認をしなくて良くなる。

Logging Config File

ファイルからLOGLEVELの設定を行えるようにする。

ログ用サーバー

  • Elasticsearch
  • LogStash

ネットワークを使ったログ収集で、これらを使うと統計情報の利用などの連携ソフトが使いやすくなるが、個人的にはそこまでの必要は今のところない。

LogViewer

SnakeTail

  • 一致するものに色をつけることができるなど大体の要望は満たす。
    • ただ、表示するものをフィルタリングで選べない(DEBUGは表示しないなど)

サンプルコード

必要モジュールをインストール。

にほんブログ村 為替ブログへ 
Fx-Kirin

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年に帰国。零細株式会社経営中。

Adsense

  • このエントリーをはてなブックマークに追加
  • Pocket
  • 64 follow us in feedly

関連記事

VimでPythonのIDE 環境を一から構築する

追記 これ見ておいたほうがいいかも。 Vimを最強のPython開発環境にする2 - Λlisue's blog

記事を読む

Python requests に DefaultTimeout を設定する

Pythonコード 参考リンク [bm url="https://stackoverflow.com/quest

記事を読む

絶対ダメ! マルチスレッドでの共通変数のインクリメント演算

デバッグ中の発見 とあるマルチスレッドプログラムをPythonで書いていた際に遭遇した誤使用です。C/C++等

記事を読む

vim-slime を使って VIM の内容をコンソールに送信

この記事はVim Advent Calendar 2016の20日目の記事です。 選択行の内容をコンソールに送信

記事を読む

Python 2, Python 3 で更新したファイルを調べてreloadするパッケージを作った。

pdbでのデバッグにはreload機能がない IPythonには優秀なautorelaod機能がマジックコマンドで

記事を読む

CPP extension vs Cython vs CPython on calculating the mean of numpy array

I'd like to get any feedback to make cython faster like

記事を読む

Derivatives analytics with Python の学習ノート 1,2章

洋書を読んでいると、いつも読んだ気になってちゃんと理解出来てるか自信がないことが多いので、チャプターごとに要点をまとめ

記事を読む

Pythonで簡単自動化!PyAutoGuiが便利すぎて感動したのでご紹介

以前こんな記事を書いていたのですが、これがまったく不要になるとても便利なPython Libraryがあった

記事を読む

ctypes で c_char array を c_char_p に変換する

なかなか情報がなかったのでメモ書き。

記事を読む

Python x64 & MinGW64 環境の構築

流石に詰まりまくったのでまとめることにする。 MSYS2 をインストール 個人的にこれからメインで使いたいと思っ

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Adsense

DictCursor に AttrDict を指定する

Python requests に DefaultTimeout を設定する

Pythonコード 参考リンク [bm url="https://stackoverflow

Python Mock で オリジナルのインスタンメソッドのを呼びたい時

autospec と sideeffect を組み合わせるのが解決策だった。

Python 2, Python 3 で string を bytes に変換する。

共通の処理系にしておきたかったので、メモ書き。 [bm url="https://python

ctypes で c_char array を c_char_p に変換する

なかなか情報がなかったのでメモ書き。

→もっと見る

PAGE TOP ↑