2 回答

TA貢獻1111條經(jīng)驗 獲得超0個贊
您可以為內(nèi)置創(chuàng)建包裝模塊log
您的項目/日志/日志
package log
import goLog "log"
func Fatal(v ...interface{}) {
goLog.Fatal(v...)
// send request ...
// reqQueue <- some args
}
將模塊替換為項目中的包裝器log
// import "log"
import "yourproject/log"
func Foo() {
log.Fatal(err)
}

TA貢獻1798條經(jīng)驗 獲得超3個贊
嘗試創(chuàng)建一個包裝標準 Logger 類型的類型,但具有所需的增強功能。然后,通過創(chuàng)建一個名為“l(fā)og”的實例來包裝默認記錄器,您可以繼續(xù)以相同的方式在代碼中使用日志記錄,并且所需的更改最少(因為它將與日志包具有相同的名稱,并保留*所有方法)。
package main
import _log "log"
type WrappedLogger struct {
// This field has no name, so we retain all the Logger methods
*_log.Logger
}
// here we override the behaviour of log.Fatal
func (l *WrappedLogger) Fatal(v ...interface{}) {
l.Println("doing the HTTP request")
/// do HTTP request
// now call the original Fatal method from the underlying logger
l.Logger.Fatal(v...)
}
// wrapping the default logger, but adding our new method.
var log = WrappedLogger{_log.Default()}
func main() {
// notice we can still use Println
log.Println("hello")
// but now Fatal does the special behaviour
log.Fatal("fatal log")
}
*這里唯一的問題是,我們用日志實例替換了典型的日志包。在許多方面,它的行為是相同的,因為為了方便起見,日志包中的大多數(shù)函數(shù)都設置為轉(zhuǎn)發(fā)到默認的 Logger 實例。
但是,這意味著我們的新成員將無法訪問日志包中的“true”函數(shù),例如 log。新建。為此,您需要將別名引用到原始包。log
// want to create a new logger?
_log.New(out, prefix, flag)
- 2 回答
- 0 關注
- 99 瀏覽
添加回答
舉報