亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有沒有辦法在開發/測試環境中使用 cloud.google.com/go/logging

有沒有辦法在開發/測試環境中使用 cloud.google.com/go/logging

Go
海綿寶寶撒 2022-10-04 16:03:53
不過,我是關于“隱藏”記錄器初始化,并在開發環境中運行代碼時從中返回一個正常的記錄器(),并在GCP上部署時返回一個記錄器()。logcloud.google.com/go/logging但是 logger 沒有與 相同的接口,因此它需要一些額外的包裝,我希望我能避免這種情況。cloud.google.com/go/logginglog查看文檔,我找不到執行此操作的標準方法。如果沒有辦法做到這一點,那么避免垃圾郵件Google云日志記錄的常用方法是什么,日志不是來自預生產/生產環境?除了使日志變得嘈雜之外,日志引入還有我想在某些情況下避免的成本。
查看完整描述

3 回答

?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

除了@Sergiusz答案之外,您還可以將開發記錄到具有模板化名稱的相同日志中,并使用 logadmin 包按名稱刪除日志。您可以在執行結束時,在計劃的進程中或從命令行執行此操作。您也可以使用命令執行此操作。如果您有多個日志,則需要在每個日志中多次調用“刪除”。gcloud logging logs delete

但是,我建議改為模擬包,因為使用它可能會耗盡您在開發項目上的API配額。因此,如果將日志寫入 STDOUT 就足夠了,那么最快的方法就是模擬記錄器類型。

附言:我建議在 https://github.com/googleapis/google-cloud-go 您的用例中打開一個問題并要求進行更改。不過,這可能會導致重大更改,但提供反饋仍然很重要。


查看完整回答
反對 回復 2022-10-04
?
一只名叫tom的貓

TA貢獻1906條經驗 獲得超3個贊

回顧一下評論:
谷歌云允許為接收器創建排除過濾器。根據谷歌文檔

您可以選擇將日志導出到BigQuery,云存儲或云發布/訂閱,而無需付費將它們提取到堆棧驅動程序中。您甚至可以使用排除篩選器來收集一定比例的日志,例如 1% 的成功 HTTP 響應。

此外,請注意,每個項目每月的前 50 GiB 日志是免費的 1。
日志存儲桶中的前 30 天存儲也是免費的。


查看完整回答
反對 回復 2022-10-04
?
喵喔喔

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")

}

我還沒有對代碼提出太多挑戰,所以也許它會有一些怪癖。


查看完整回答
反對 回復 2022-10-04
  • 3 回答
  • 0 關注
  • 117 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號