【问题标题】:unable to send logrus output /dev/null无法发送 logrus 输出 /dev/null
【发布时间】:2017-06-28 06:24:34
【问题描述】:

我正在使用Logrus 包来登录我​​的项目。

一切都很好,但出于测试目的,我不需要显示 logrus 输出。

我正在查看logrus.SetOuput 的答案。

所以基本上我希望将日志写入/dev/null

但由于某种原因,我仍然在 STDOUT 上看到日志

   // This code run right at the start
   if env == "test" {
        fmt.Println("Entering test mode ....")
        logrus.SetOutput(ioutil.Discard)
        return
    }

我的记录器设置如下所示

// logger.go

package logger

import(
    "os"
    "io/ioutil"
    "github.com/Sirupsen/logrus"
)

var log *logrus.Logger

const (
    DEBUG   = 0
    INFO    = 1
    WARNING = 2
    ERROR   = 3
)

func init() {
    env := os.GetEnv("ENV")
    if env != "test" {
        return
    }
    logrus.SetOutput(ioutil.Discard)
}


func Init(logLevl int) {
    log = logrus.New()
    log.Formatter = &logrus.TextFormatter{FullTimestamp: true}
    switch logLevl {
    case DEBUG:
        log.Level = logrus.DebugLevel
    case INFO:
        log.Level = logrus.InfoLevel
    case WARNING:
        log.Level = logrus.WarnLevel
    case ERROR:
        log.Level = logrus.ErrorLevel
    }
}

func Get() *logrus.Logger {
    return log
}

func I(args ...interface{}) {
    log.Info(args)
}

func Df(format string, args ...interface{}) {
    log.Debugf(format, args)
}

func D(args ...interface{}) {
    log.Debug(args)
}

func W(args ...interface{}) {
    log.Warn(args)
}

这里是我如何使用logger

import "logger"

func init() {
  logger.Init(0)
}

logger.D("Dummy string")

【问题讨论】:

  • @mattn SetOutput() 在包级别配置 logrus 的导出标准记录器(c.f.,github.com/sirupsen/logrus/blob/master/exported.go
  • @fhe 如果通过 New() 谈论新变量,并使用 logrus.SetOutput() (即 std)进行修改,我认为它可能是不同的行为。或获取 &Logger{}。
  • @mattn 希望对您有所帮助。

标签: logging go


【解决方案1】:

您在代码中使用了两个不同的 logrus.Logger 变量。第一个,在init() 中调用,是从 logrus 导出的全局默认 Logger。稍后,在您的自定义初始化函数 Init(logLevel int) 中,您将通过 logrus.New() 创建一个新的 Logger,从那时起用于记录 - 但尚未配置为使用不同的输出。

我建议去掉 init() 函数并在您的 Init(logLevel int) 中进行所有初始化(请注意用于设置输出的不同 API)。

func Init(logLevl int) {
    log = logrus.New()
    log.Formatter = &logrus.TextFormatter{FullTimestamp: true}
    switch logLevl {
    case DEBUG:
        log.Level = logrus.DebugLevel
    case INFO:
        log.Level = logrus.InfoLevel
    case WARNING:
        log.Level = logrus.WarnLevel
    case ERROR:
        log.Level = logrus.ErrorLevel
    }

    env := os.Getenv("ENV")
    if env != "test" {
        return
    }
    log.Out = ioutil.Discard
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 2017-11-20
    • 1970-01-01
    • 2020-05-12
    • 2012-01-04
    • 2012-05-01
    相关资源
    最近更新 更多