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 關注
- 117 瀏覽
添加回答
舉報