2016-03-21 12 views
0

正如我所看到的,每個開發人員都有自己的需求和方法來解決相同的事情/需求。作爲例子,日誌記錄。有許多日誌軟件包以不同的方式工作,每個開發者都選擇最適合他們需求/偏好的日誌軟件包。考慮到這一點,我想創建一個應該使用調用者的日誌包的包。可能嗎?有人有辦法做到這一點?如何創建一個包來使用任何記錄器,具體取決於golang中的「調用者」程序?

事情是這樣的:

主代碼中使用logrus包:

package main 

import (
    "os" 

    "github.com/Sirupsen/logrus" 

    "gitlab.com/tutume/_testing/globallogs/mypack" 
) 

var Log = logrus.New() 

var myPack pack.Pack 

func 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() 

} 

mypack代碼:

package pack 

type Pack struct { 
    Logger interface{} 
} 

func (mp *Pack) DoSomething() { 
    // Logger.Debug("Debugging...") 
    // Logger.Info("Informing...") 
    // Logger.Error("Normal...") 
} 

回答

1

如果我理解你想要做什麼,你需要定義一個日誌包可以實現的接口。如果將Logger定義爲空接口,則無法調用任何這些方法。相反,您需要定義一個包含您想要使用的方法的接口(Debug,Info,Error等)。任何日誌包必須實現這些方法。如果某個特定的日誌包已經沒有正確的方法集,那麼在定義它時,必須編寫一些包裝代碼來實現該接口。

+0

謝謝。我會嘗試一些並讓你知道結果。 – Tuts

0

我一直在搜索,發現this post。很有意思。 作爲一名基礎架構經理/技術人員,我從許多使用(並使用過的)軟件中總會漏掉一件事情,那就是具有儘可能深入的信息來識別和解決問題,甚至記錄所有審計/安全建議。很多時候,我們遇到了一些問題,即使在調試模式下,我們也無法找到問題的確切原因,但我們最終找到了「可能」原因。現在回到開發世界,看看開發人員如何使用日誌和庫,我認爲這可能是一個原因(主程序和它的庫之間缺乏「互操作性」)。由於庫通常有「自己的「記錄(或者根本不登錄)和多次,並不能完全控制庫內發生的事情,在大多數情況下,正在開發主程序的開發人員(使用這種庫)將無法完成爲自己的應用程序提供必要的日誌記錄細節當然,我明白,在開源世界中,如果你想獲得更詳細的信息,包括你使用的庫,因爲它是開源的,你可以簡單地進行更改然後,這可能會使圖書館的使用(考慮到使用圖書館的主要優點是不花時間「重新創建輪子」,在其他世界的可重用性中)並不像應該那樣有用。由於引用的帖子中提到,處理它的一種方式是始終發送給調用者「必要」的信息來處理。但通常它適用於錯誤,致命錯誤和信息級事件。但對於例如調試和跟蹤,開發庫時(這是很多原因)並不「實際」,然後我認爲一個重要原因是,當開發人員開發庫時,他已經需要所有的調試和跟蹤進行測試,但不一定會發回給調用者。另一種詳細的方式是使用處理程序,但通過這樣做,圖書館的開發人員將有更多的工作要做。當Andy回答(並在文章中討論)時,另一種方法是創建一個接口,該接口將接收主程序記錄器並使用它,並且爲了使該選項正常工作,它應該使用stdlib日誌(或一些日誌記錄庫實現最大的comum日誌級別),以防調用程序無法記錄日誌。 對於我現在的「願望」(因爲我再次編程,完全在Go中徘徊),我會創建一些「難看的代碼」來處理我的需求並不斷學習並嘗試完成「完美日誌記錄系統」到目前爲止,恕我直言正在使用接口,如安迪建議。

相關問題