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
  • 66 follow us in feedly

関連記事

no image

vim-ipythonをWindows 7 x64で使うとR6034 が出る件

個人的なただの忘備録。 Visual Studioのコマンドプロンプトから実行すること。 http://st

記事を読む

Python requests に DefaultTimeout を設定する

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

記事を読む

swig で foofunction is private と怒られた時。

例えばのエラーとしてはこれ。 問題は、公開する予定のクラスのpublicインスタンス変数にprivateにしなけれ

記事を読む

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

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

記事を読む

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

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

記事を読む

Pythonのsocketでプロセス間通信をして価格データ等を送信する

どうも、お久しぶりです。キリンです。 取り敢えず1ヶ月ほど、連続でブログの更新を続けてみたのですが、そ

記事を読む

まだ Python の datetime で消耗しているの? maya 使おうぜ

この記事は Python Advent Calendar 2016 の 24日目の記事です。 当初は SCOOP

記事を読む

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

記事を読む

ctypes で c_char array を c_char_p に変換する

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

記事を読む

Python Pandas からお手軽に highcharts が使える kanichart 作りました。

Kanichart fx-kirin/kanichart: Easy(簡易) plotting library.

記事を読む

Message

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

Adsense

Avoiding the problem of connect to outside of LAN with L2TP/IPSec on Ubuntu 18.04.

とても困って、原因の特定に2日かかった。疲れた。確定申告したいのに。 The IPSEC tu

Wine 上の MT4から ZeroMQ を使って Linux の pyzmq の通信をさせる

こんにちは。キリンです。 最近、年に数度のMQLを書くときがきたのですが、Pythonに慣れま

numpy の2つ行列で片方にあるものだけを抽出する。

numpy で2つの時間のインデックスをarrayデータとして持っていて、x にはない時間のイン

Synology DS216j の MySQL に外部からつなぐ

Synology DS216j をNAS(RAID1 12TB)として使っています。もっぱらデー

VMWare Player をヘッドレスモードで使う。

[bm url="http://www.ryanchapin.com/fv-b-4-713/Ru

→もっと見る

PAGE TOP ↑