我在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包装。
有没有办法防止此行为?不希望重新处理这些日志以便正确格式化它们。
答案 0 :(得分:0)
额外的信息实际上非常方便,特别是在appengine环境中,模块/服务,版本或instance_id上的过滤可以真正帮助您调查问题。
如果重新处理日志是您的问题,我建议您使用export to BigQuery functionality。日志将不断流式传输到BigQuery并立即查询。这里的好处是你可以只查询text_payload属性并轻松地将这个结果集导出到csv,text,json等。
至于从日志中只输出文本行,我不相信这是可能的。