我正在尝试将信息/错误日志从Go语言编写的Cloud Function发送到GCP上的StackDriver Logging上,但是所有日志都没有分配日志级别。
我已经从https://github.com/GoogleCloudPlatform/golang-samples/blob/master/functions/helloworld/hello_logging.go创建了函数 演示问题。
答案 0 :(得分:0)
此处提供云支持!您无法尝试执行documentation中指定的操作:
登录到 stdout 或 stderr 的日志级别没有关联。
内部系统消息的日志级别为 DEBUG 。
您可能需要使用Logging API,特别是Log Levels部分。
如果这对您不起作用,您可以尝试使用currently emits logs到node.js
和go
级别,INFO
代替ERROR
,{ 1}}和console.log()
。
答案 1 :(得分:0)
您可以使用允许您设置日志级别的外部库。 Here我使用的示例。 使用logrus来设置最小日志级别(可以通过在env var中提供日志级别来改进此代码),并使用joonix来实现流畅的格式化程序。(第25行)
注意点。第11行,我将logrus包日志重命名
log "github.com/sirupsen/logrus"
因此,不要使用日志标准库,而是使用logrus库。有时候很无聊...您可以简单地将log替换为logrus以避免所有混乱。
Joonix是fluentD格式化程序,用于将日志转换为Stackdriver的可摄取格式。
答案 2 :(得分:0)
欢迎您使用以下库:
github.com/ncruces/go-gcf/logging
支持日志级别,还支持执行ID。
用法:
func HelloWorld(w http.ResponseWriter, r *http.Request) {
ctx := logging.ForRequest(r)
// ...
logging.Info(ctx).Println("Hello logs")
logging.Error(ctx).Println("Hello logs")
}
或者,对于后台功能:
func HelloBackground(ctx context.Context, m interface{}) error {
logging.Info(ctx).Println("Hello logs")
logging.Error(ctx).Println("Hello logs")
return nil
}
完全公开:我是作者。 我已经在生产中使用了6个月。 反馈表示赞赏。
答案 3 :(得分:0)
我也为此创建了一个包。如果您使用对数(https://github.com/sirupsen/logrus),则可能会有所帮助:
https://github.com/tekkamanendless/gcfhook
我正在生产中使用它,并且效果很好。
答案 4 :(得分:0)
我推荐https://github.com/apsystole/log。它也是 log 和 logrus 兼容的,但是一个小的零依赖模块,这与两个现有答案中使用的库不同,这些库将 400 多个模块作为它们的依赖项(喘气......我只是在看{ {1}})。