2016-09-12 74 views
0

我有一個golang項目,我試圖用loggly作爲日誌記錄在https://www.loggly.com/blog/logging-to-loggly-from-go-with-logrus-and-logrusly/Golang logrus日誌發送到loggly

的問題在他們的博客中解釋是,他們的例子,事情好,但我有一堆文件和幾十個函數(處理API調用),我不想每次都重新初始化記錄器實例。

這工作完全在main.go

log := logrus.New() 
hook := logrusly.NewLogglyHook(logglyToken, domain, logrus.WarnLevel, logglyUsername, logglyPassword) 
log.Hooks.Add(hook) 
log.Info("Welcome") 
hook.Flush() 

,我能夠在我loggly帳戶看到這則消息。

但是,如果我做這樣的事情 -

func LogrusLogger(loglevel string, message interface{}){ 
    log := logrus.New() 
    hook := logrusly.NewLogglyHook(logglyToken, domain, logrus.WarnLevel, logglyUsername, logglyPassword) 
    log.Hooks.Add(hook) 

    log.Info(loglevel, message) 
    hook.Flush() 
} 

然後在調用此功能,日誌可以在程序控制臺看到,但不是在帳戶中指定loggly。 我是否正確調用了hook.Flush()? (因爲我假定這就是日誌被髮送到loggly服務器點)

附加信息: 代碼的第一件作品是在main.gomain()函數內部

代碼的第二件作品是在utility.go它有一個程序包實用程序,我把這個函數稱爲utility.LogrusLogger(loglevel, message),只要我想要在該文件中導入程序包實用程序。 我很確定事情沒有問題,因爲我能夠在程序控制臺中看到日誌。

回答

0

我能夠通過聲明來解決問題,使用這樣的功能全局以下

log := logrus.New() 
hook := logrusly.NewLogglyHook(logglyToken, domain, logrus.WarnLevel, logglyUsername, logglyPassword) 

,然後 -

func LogrusInfo(args ...interface{}) { 
    logger.Hooks.Add(hook) 
    logger.Info(args...) 
    hook.Flush() 
} 

參考:https://stackoverflow.com/a/30261304/4720042