2016-06-24 10 views
1

私は他のアプリケーションログから特定のフォーマット要件にカスタムログを分離するために、Google App Engineの上の柔軟な(VM)環境で次のコードを使用しました:生カスタムログ

import logging as std_logging 

std_logging.basicConfig() 

custom_formatter = std_logging.Formatter('%(created)f\t%(message)s') 
custom_handler = std_logging.FileHandler('/var/log/app_engine/custom_logs/custom.log') 
custom_handler.setFormatter(custom_formatter) 
custom_logging = std_logging.getLogger('custom') 
custom_logging.addHandler(custom_handler) 

通常のPython環境では、これらは指定された形式のプレーンテキスト行としてログファイルに書き込まれます。

しかし、App Engineから生成されたログをCloud Storageにダンプした後、App Engineが各ログを他の情報でラップしていることに気付きました。

など。

{ 
    "insertId":"vsdacv1235jj1", 
    "log":"appengine.googleapis.com/custom.var.log.app_engine.app.custom_logs.custom.log", 
    "metadata":{ 
     "labels":{ 
      "appengine.googleapis.com/module_id":"default", 
      "appengine.googleapis.com/version_id":"1", 
      "compute.googleapis.com/resource_id":"1234256789901203", 
      "compute.googleapis.com/resource_name":"bbq23asd123", 
      "compute.googleapis.com/resource_type":"instance" 
     }, 
     "projectId":"my-project", 
     "serviceName":"appengine.googleapis.com", 
     "timestamp":"2016-06-24T20:16:15Z", 
     "zone":"us-central1-f" 
    }, 
    "textPayload":"1466799374933\tthis is my custom message" 
} 

textPayloadフィールドの値は、私が生成される実際のログです(わかりやすくするためにフォーマットされた)が、App Engineので包まれています。

この現象を防ぐ方法はありますか?ログを正しくフォーマットするためにこれらのログを再処理することは望ましくありません。

答えて

0

特に、モジュール/サービス、バージョン、またはinstance_idのフィルタリングが実際に問題の調査に役立つことができるappengine環境では、追加情報は非常に便利です。

ログを再処理しても問題が解決しない場合は、export to BigQuery functionalityを参考にしてください。ログは常にBigQueryにストリームされ、直ちに照会可能です。ここで便利なのは、text_payloadプロパティだけを照会して、この結果セットをcsv、text、jsonなどに簡単にエクスポートできることです。

ログからテキストの行をエクスポートする限り、これは可能。

関連する問題