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

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

如何創建一個包來使用任何記錄器,取決于 golang 中的“調用者”程序?

如何創建一個包來使用任何記錄器,取決于 golang 中的“調用者”程序?

Go
一只斗牛犬 2021-12-27 15:19:38
正如我所看到的,每個開發人員都有自己的需求和方法來解決相同的事情/需求。例如,日志記錄。有許多以不同方式工作的日志包,每個開發人員都會選擇最適合他們的需求/偏好的一個??紤]到這一點,我想創建一個應該使用調用者的日志包的包。是否可以?有人有辦法做到這一點嗎?像這樣的東西:使用 logrus 包的主要代碼:package mainimport (    "os"    "github.com/Sirupsen/logrus"    "gitlab.com/tutume/_testing/globallogs/mypack")var Log = logrus.New()var myPack pack.Packfunc main() {    isDebug := os.Getenv("MYAPP_LOGLEVEL")    switch isDebug {    case "Debug":        Log.Level = logrus.DebugLevel    case "Info":        Log.Level = logrus.InfoLevel    default:        Log.Level = logrus.ErrorLevel    }    Log.Formatter = &logrus.TextFormatter{        ForceColors: true,    }    Log.Debug("Debugging...")    Log.Info("Informing...")    Log.Error("Normal...")    myPack.Logger = Log    myPack.DoSomething()}我的包代碼:package packtype Pack struct {    Logger interface{}}func (mp *Pack) DoSomething() {    //  Logger.Debug("Debugging...")    //  Logger.Info("Informing...")    //  Logger.Error("Normal...")}
查看完整描述

2 回答

?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

如果我理解你想要做什么,你需要定義一個日志包將實現的接口。如果您將 Logger 定義為空接口,您將無法調用任何這些方法。相反,您需要定義一個包含要使用的方法(調試、信息、錯誤等)的接口。任何日志包都必須實現這些方法。如果某個特定的日志記錄包還沒有正確的方法集,則必須編寫一些包裝器代碼來在定義接口時實現該接口。


查看完整回答
反對 回復 2021-12-27
?
侃侃無極

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

我一直在搜索并找到了這篇文章. 很有意思。作為基礎設施經理/技術人員,我一直在使用(和使用過)的許多軟件中遺漏的一件事是能夠獲得盡可能深入的信息來識別和修復問題,甚至記錄所有內容以進行審計/安全提議。很多時候,我們面臨一些問題,即使在調試模式下我們也無法找到問題的確切原因,我們最終只能找到“可能”的原因?,F在回到開發世界,看看開發人員如何處理日志和庫,我認為這可能是一個原因(缺乏“主程序與其庫之間的互操作性”)。因為庫通常有“自己的” “ 登錄(或根本不登錄)并且很多時候,并沒有給出“完全控制” 關于庫內部發生的事情,在大多數情況下,正在開發主程序(使用此類庫)的開發人員將無法為其自己的應用程序提供必要的日志記錄詳細信息。當然,我理解在開源世界中,如果您想獲得更詳細的信息,包括來自您使用的庫的信息,因為它是開源的,您可以簡單地進行更改并完成。但是,這可能會使圖書館的使用(考慮使用圖書館的優勢主要是為了不花時間“重新創建輪子”,在其他世界的可重用性)沒有應有的幫助。正如所引用的帖子所提到的,處理它的一種方法是始終向調用者發送要處理的“必要”信息。但通常它適用于錯誤、致命和信息級別的事件。但是以調試和跟蹤為例,在開發庫時并不“實用”(出于多種原因),然后我認為一個很大的原因是開發人員在開發庫時,他已經需要所有調試和跟蹤用于測試,但不一定發送回調用者。文章中詳述的另一種方法是使用處理程序,但通過這樣做,庫的開發人員將有更多的工作要做。正如安迪回答的那樣(并且也在帖子中討論過),另一種方法是創建一個接口來接收主程序的記錄器并使用它,為了使這個選項正常工作,它應該使用 stdlib 日志(或一些日志庫)實現最常見的日志記錄級別)以防調用程序不涉及日志記錄。為了我現在的“愿望”(就像我


查看完整回答
反對 回復 2021-12-27
  • 2 回答
  • 0 關注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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