Google App Engine灵活环境中的原始自定义日志

时间:2016-06-24 23:27:08

标签: python google-app-engine

我在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生成的日志转储到云存储后,我注意到App Engine已将每个日志包含在其他信息中。

E.g。 (为清晰起见,格式化)

{
    "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包装。

有没有办法防止此行为?不希望重新处理这些日志以便正确格式化它们。

1 个答案:

答案 0 :(得分:0)

额外的信息实际上非常方便,特别是在appengine环境中,模块/服务,版本或instance_id上​​的过滤可以真正帮助您调查问题。

如果重新处理日志是您的问题,我建议您使用export to BigQuery functionality。日志将不断流式传输到BigQuery并立即查询。这里的好处是你可以只查询text_payload属性并轻松地将这个结果集导出到csv,text,json等。

至于从日志中只输出文本行,我不相信这是可能的。