0

私は golang プロジェクトを持っており、https://www.loggly.com/blog/logging-to-loggly-from-go-with-logrus-and-logrusly/ のブログで説明されているようにログ記録を使用しようとしています。

問題は、彼らの例ではうまくいっていますが、たくさんのファイルと数十の関数 (API 呼び出しを処理する) があり、毎回ロガーインスタンスを再初期化したくありません。

これは main.go で完全に機能します

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

ログリー アカウントでこのメッセージを確認できます。

しかし、私がこのようなことをすると-

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.go内にありますmain()

2 番目のコードにはパッケージ ユーティリティが含まれており、そのファイルにパッケージ ユーティリティをインポートした後、任意の場所utility.goで関数を呼び出します。utility.LogrusLogger(loglevel, message)プログラム コンソールでログを確認できるので、問題はないと確信しています。

4

1 に答える 1

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

于 2016-09-29T04:48:24.573 に答える