3 回答
TA贡献1777条经验 获得超10个赞
除了@Sergiusz答案之外,您还可以将开发记录到具有模板化名称的相同日志中,并使用 logadmin 包按名称删除日志。您可以在执行结束时,在计划的进程中或从命令行执行此操作。您也可以使用命令执行此操作。如果您有多个日志,则需要在每个日志中多次调用“删除”。gcloud logging logs delete
但是,我建议改为模拟包,因为使用它可能会耗尽您在开发项目上的API配额。因此,如果将日志写入 STDOUT 就足够了,那么最快的方法就是模拟记录器类型。
附言:我建议在 https://github.com/googleapis/google-cloud-go 您的用例中打开一个问题并要求进行更改。不过,这可能会导致重大更改,但提供反馈仍然很重要。
TA贡献1906条经验 获得超3个赞
回顾一下评论:
谷歌云允许为接收器创建排除过滤器。根据谷歌文档:
您可以选择将日志导出到BigQuery,云存储或云发布/订阅,而无需付费将它们提取到堆栈驱动程序中。您甚至可以使用排除筛选器来收集一定比例的日志,例如 1% 的成功 HTTP 响应。
此外,请注意,每个项目每月的前 50 GiB 日志是免费的 1。
日志存储桶中的前 30 天存储也是免费的。
TA贡献1735条经验 获得超5个赞
最后,正如@leo-y所建议的那样,我有点嘲笑了一个记录器,并将实现细节隐藏在接口后面。我不愿意这样做,因为我是golang的新手,但最终这不是那么多的代码:
logging/Logger.go:
package logging
// Logger is just an interface to abstract away what
// kind of logger we return on initialization
type Logger interface {
LogInfo(string)
LogWarning(string)
LogError(string)
Close()
}
日志记录/初始化/日志记录.
package initialization
import (
"context"
"log"
customLogging "organization/module-name/logging"
"cloud.google.com/go/logging"
"google.golang.org/api/option"
)
// GetLogger return a logging client
func GetLogger(onCloud bool) customLogging.Logger {
if onCloud {
return getLoggerGCP()
}
return loggerConsole{}
}
func getLoggerGCP() loggerGCP {
ctx := context.Background()
projectID := "PROJECT-ID"
client, err := logging.NewClient(ctx, projectID, option.WithCredentialsFile("/path/to/credentials.json"))
if err != nil {
log.Fatalf("Failed to create logging client: %v", err)
}
return loggerGCP{
client: client,
logger: client.Logger("logs-name"),
}
}
type loggerGCP struct {
client *logging.Client
logger *logging.Logger
}
type loggerConsole struct {
}
func (logger loggerGCP) LogInfo(s string) {
stdlogger := logger.logger.StandardLogger(logging.Info)
stdlogger.Println(s)
}
func (logger loggerGCP) LogWarning(s string) {
stdlogger := logger.logger.StandardLogger(logging.Warning)
stdlogger.Println(s)
}
func (logger loggerGCP) LogError(s string) {
stdlogger := logger.logger.StandardLogger(logging.Error)
stdlogger.Println(s)
}
func (logger loggerGCP) Close() {
logger.client.Close()
}
func (logger loggerConsole) LogInfo(s string) {
log.Printf("INFO: %s\n", s)
}
func (logger loggerConsole) LogWarning(s string) {
log.Printf("WARNING: %s\n", s)
}
func (logger loggerConsole) LogError(s string) {
log.Printf("ERROR: %s\n", s)
}
func (logger loggerConsole) Close() {
}
主要.go
package main
import (
"organization/module-name/logging/initialization"
)
func main() {
logger := initialization.GetLogger(false)
defer logger.Close()
logger.LogInfo("hello")
}
我还没有对代码提出太多挑战,所以也许它会有一些怪癖。
- 3 回答
- 0 关注
- 91 浏览
添加回答
举报