Python のロギングモジュールは、サードパーティーのモジュールやアプリケーションで使用できる汎用のロギングシステムです。ロギングモジュールは、ファイル、HTTP GET/POST、SMTP、Socket といったさまざまな方法で、さまざまなログレベルおよびログを記録します。ロギング方法をカスタマイズすることもできます。ロギングモジュールは基本的には Log4j と同じですが、細部が異なります。ロギングモジュールには、Logger、Handler、Filter、および Formatter 機能があります。

Python ログを収集するには、logging handler をそのまま使用されることをお勧めします。

Python のログフォーマット

formatter のログ出力フォーマットがログフォーマットです。Formatter には、メッセージのフォーマット (String 型) および日付 (String 型) の 2 つのパラメーターを定義します。両パラメーターともオプションです。

Python のログフォーマット

import logging  
import logging.handlers  
LOG_FILE = 'tst.log'  
handler = logging.handlers.RotatingFileHandler(LOG_FILE, maxBytes = 1024*1024, backupCount = 5) # Instantiate the handler   
fmt = '%(asctime)s - %(filename)s:%(lineno)s - %(name)s - %(message)s'  
formatter = logging.Formatter(fmt)   # Formatter を初期化  
handler.setFormatter(formatter)      # Handler に Formatter を追加
logger = logging.getLogger('tst')    # 「tst」Logger を取得
logger.addHandler(handler)           # Logger に Handler を追加
logger.setLevel(logging.DEBUG)  
logger.info('first info message')  
logger.debug('first debug message')

フィールドの説明

Formatter の設定書式は、%(key)sです。属性辞書のキーワードを置き換えます。キーワードは、以下のとおりです。
フォーマット 意味
%(name)s 生成されたログの Logger 名
%(levelno)s メッセージのログレベル (DEBUG、INFO、WARNING、ERROR、および CRITICAL) の番号
%(levelname)s メッセージのログレベル (DEBUG、INFO、WARNING、ERROR、および CRITICAL) の文字列
%(pathname)s ロギングの呼び出しソースファイルの完全パス (取得可能な場合)
%(filename)s ファイル名
%(module)s ロギングの呼び出しモジュール名
%(funcName)s ロギングの呼び出し関数名
%(lineno)d ロギングの呼び出しコードの行 (取得可能な場合)
%(created)f ログの生成時間 (UNIX タイムスタンプ)。1970-1-100 00:00:00 UTC からの秒数。
%(relativeCreated)d ログの生成時間およびロギングモジュールのロード時間との差 (単位: ミリ秒)
%(asctime)s ログの生成時間。書式: デフォルトで「2003-07-08 16:49:45,896」(コンマ (,) の後の数字はミリ秒数)
%(msecs)d ログ生成時間 (単位: ミリ秒)
%(thread)d スレッドID (取得可能な場合)
%(threadName)s スレッド名 (取得可能な場合)
%(process)d プロセス ID (オプション)
%(message)s ログメッセージ

ログサンプル

ログサンプル

2015-03-04 23:21:59,682 - log_test.py:16 - tst - first info message   
2015-03-04 23:21:59,682 - log_test.py:17 - tst - first debug message

一般的な Python ログおよび正規表現

  • ログフォーマット
    2016-02-19 11:03:13,410 - test.py:19 - tst - first debug message
    正規表現
    (\d+-\d+-\d+\s\S+)\s+-\s+([^:]+):(\d+)\s+-\s+(\w+)\s+-\s+(. *)
  • ログフォーマット
    %(asctime)s - %(filename)s:%(lineno)s - %(levelno)s %(levelname)s %(pathname)s %(module)s %(funcName)s %(created)f %(thread)d %(threadName)s %(process)d %(name)s - %(message)s
    ログサンプル
    2016-02-19 11:06:52,514 - test.py:19 - 10 DEBUG test.py test <module> 1455851212.514271 139865996687072 MainThread 20193 tst - first debug message

    正規表現

    (\d+-\d+-\d+\s\S+)\s-\s([^:]+):(\d+)\s+-\s+(\d+)\s+(\w+)\s+(\S+)\s+(\w+)\s+(\S+)\s+(\S+)\s+(\d+)\s+(\w+)\s+(\d+)\s+(\w+)\s+-\s+(. *)

Logtail を使用した Python ログの収集

Logtail を使って Python ログを収集する詳しい手順については、「5 分でクイックスタート」をご参照ください。ネットワーク構成とネットワーク設定をもとに、対応する構成を選択します。

  1. プロジェクトおよび Logstore を作成します。手順の詳細については、「準備」をご参照ください。
  2. Logstoreリストページで、データインポートウィザードアイコンをクリックします。
  3. データソースを選択します。

    テキストを選択します。

  4. データソースを設定します。
    1. 構成名およびログパスを入力し、モードドロップダウンリストで完全正規表現モードを選択します。
    2. 単一行スイッチをオンにします。
    3. ログサンプルを入力します。
    4. フィールド抽出スイッチをオンにします。
    5. 正規表現を設定します。
      1. ログサンプルの文字列を選択して正規表現を生成します。

        自動生成された正規表現がログサンプルと異なる場合、ログサンプルの文字列を選択して正規表現を生成することができます。ログサンプルの文字列を選択すると、Log Service は選択した文字列からフィールドを自動解析し、正規表現を自動生成します。 ログサンプルで、ログフィールドを選択し、Generate RegExをクリックします。選択したフィールドの正規表現が正規表現列に表示されます。複数の選択することにより、ログサンプルの完全な正規表現が生成されます。

      2. 正規表現を修正します。

        ログフォーマットを修正する必要がある場合、手動入力をクリックして、自動生成された正規表現を修正して、収集処理に必要なログフォーマットに一貫性を持たせます。

      3. 正規表現を検証します。

        正規表現を修正したら、検証をクリックします。正規表現が正しい場合、抽出結果が表示されます。エラーがあった場合には、正規表現を修正します。

    6. 抽出結果を確認します。

      ログフィールドの解析結果を表示し、ログ抽出結果に対応するキーを入力します。

      各ログフィールドの抽出結果は、容易に判別できるフィールド名を割り当てます。たとえば、time に時間フィールドを割り当てます。システム時間を使用しない場合は、time キーに値が時間であるフィールドを割り当てます。

    7. システム時間スイッチをオンにします。

      システム時間を採用すると、Logtail クライアントがログを解析した時間がログ時間になります。

    8. (オプション) 詳細オプションを設定します。
    9. 次へをクリックします。

    Logtail 設定が完了したら、設定をマシングループに適用して Python ログを収集します。