英文:
Can only access request-logs from Google App Engine golang application
问题
我有一个使用GAE的Go语言应用程序,其中的日志语句看起来像这样:
func LogDebugMessage(req *http.Request) {
context := appengine.NewContext(req)
c.Debugf("#%d Debugging Here.", 1)
}
我如何访问由c.Debugf
调用生成的日志消息?
appcfg.py request_logs
和GAE控制台(https://console.developers.google.com/project/.../logs
)似乎只有HTTP请求日志。
是否有其他工具可以请求由GAE上下文生成的日志?
英文:
I have a GAE golang application that has logging statements that look something like:
func LogDebugMessage(req *http.Request) {
context := appengine.NewContext(req)
c.Debugf("#%d Debugging Here.", 1)
}
How can I access the logging messages generated by the c.Debugf
call?
The appcfg.py request_logs
and GAE console (https://console.developers.google.com/project/.../logs
) both appear to only have HTTP request logs.
Is there another tool to request logs generated by the GAE context?
答案1
得分: 1
有两种类型的日志:请求日志是平台自动生成的,包含请求的详细信息(如时间戳、客户端IP、用户代理、状态码、服务时间、实例ID等),应用日志是通过context.Debugf()
、context.Warningf()
、context.Infof()
、context.Errorf()
和context.Criticalf()
方法调用生成的。
应用日志附加到(或与)请求相关联(请求日志记录),这些请求是在处理这些请求期间调用的。
请求(和应用)日志可以在管理控制台或开发者控制台的日志页面上查看。管理控制台和开发者控制台都显示请求和应用日志记录。请注意,在管理控制台和开发者控制台上,您需要点击日志记录以展开它们。展开请求日志后,将显示从该请求中生成的所有应用日志记录。
如果您想要下载应用日志,可以在appcfg.py
工具中指定--include_all
参数。
通过编程方式,您可以查询请求日志,请参阅Logs Go API概述了解更多详细信息。这是Log package的参考。
当您查询请求日志时,结果是log.Record
值。这是一个包含AppLogs
字段的struct
,它是log.AppLog
的切片。这个AppLog
类型(也是一个struct
)描述了由context.Debugf()
调用等生成的应用日志。
AppLog
类型的结构如下:
type AppLog struct {
Time time.Time
Level int
Message string
}
Message
是格式化日志消息的string
结果。
以下是查询包括应用日志的日志记录的示例:
c := appengine.NewContext(r)
query := &log.Query{
AppLogs: true,
Versions: []string{"1"},
}
for results := query.Run(c); ; {
record, err := results.Next()
if err == log.Done {
c.Infof("Done processing results")
break
}
if err != nil {
c.Errorf("Failed to retrieve next log: %v", err)
break
}
// 处理记录
// 处理应用日志:
for _, ap := range record.AppLogs {
msg := ap.Message
// msg是应用日志文本消息
}
}
英文:
There are 2 kinds of logs: Request logs which are generated automatically by the platform for all requests and contains request details (like timestamp, client ip, user agent, status codes, serving time, instance id etc.) and Application logs which are the result of context.Debugf()
, context.Warningf()
, context.Infof()
, context.Errorf()
and context.Criticalf()
method calls.
Application logs are attached to (or associated with) requests (request log records), requests from which they were called (during serving those requests).
Request (and application) logs can be viewed on the Logs page of the Admin console or on the Developer console. Both the Admin console and the Developer console display both Request and Application log records. Note that on both the Admin and Developer console you have to click on the log records to expand them. Once you expand a request log, all application log records will be displayed that were done from that request.
If you want to download application logs as well, you can specify the --include_all
parameter to the appcfg.py
tool.
Programatically you can query the request logs, see Logs Go API Overview for more details. Here is the Log package reference.
When you query request logs, the result are log.Record
values. This is a struct
which contains an AppLogs
field which is a slice of log.AppLog
. This AppLog
type (it's also a struct
) descirbes an application log made by e.g. a context.Debugf()
call.
The AppLog
type looks like this:
type AppLog struct {
Time time.Time
Level int
Message string
}
The Message
is the string
result of the formatted log message.
Here is an example how to query the log records including Application logs:
c := appengine.NewContext(r)
query := &log.Query{
AppLogs: true,
Versions: []string{"1"},
}
for results := query.Run(c); ; {
record, err := results.Next()
if err == log.Done {
c.Infof("Done processing results")
break
}
if err != nil {
c.Errorf("Failed to retrieve next log: %v", err)
break
}
// Do something with record
// Process Application logs:
for _, ap := range record.AppLogs {
msg := ap.Message
// msg is an application log text message
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论