【问题标题】:How to hide loglevel and time in logrus如何在 logrus 中隐藏日志级别和时间
【发布时间】:2015-11-18 13:18:29
【问题描述】:

我正在尝试以 CSV 格式编写日志。我正在尝试使用 logrus 将 CSV 写入日志。但我看到日志级别(信息)和添加到日志中 CSV 内容的时间。喜欢,

time="2015-11-18T01:27:38-04:00" level=info msg="100,Click,Android"

如何使用 logrus 只写我的消息? 还是应该使用 golang 中可用的任何其他记录器?

注意:我是新手

【问题讨论】:

  • 从您的示例看来,只有 msg 的内容是实际的 CSV。你的预期输出是什么? msg="100,Click,Android" 还是简单的 100,Click,Android?
  • 是的 msg 本身就是一个 csv。所以我只需要100,Click,Android

标签: csv logging go


【解决方案1】:

我正在尝试使用 logrus 将 CSV 写入日志。但我在日志中看到了日志级别(信息)和添加到 CSV 内容的时间。

看来您绝对不应该使用 logrus,因为它存在的主要原因是创建 结构化 日志,即键值样式。不知道你为什么不干脆做

fmt.Println("100,Click,Android")

fmt.Fprintln(os.Stderr, "100,Click,Android")

如果您希望将其写入标准错误(记录器的默认设置)。

如果出于任何原因您需要一个记录器,您几乎可以通过禁用标志来使用standard logger 做同样的事情:

log.SetFlags(0)
log.Println("100,Click,Android")

// Output:
// 100,Click,Android

但是,如果您自己创建 CSV 输出(即,您已经有单独的字段而不是完整的 CSV 行),请使用标准库中的 csv package

w := csv.NewWriter(os.Stdout)
w.Write([]string{"100", "Click", "Android"})
w.Flush()

// Output:
// 100,Click,Android

除非您只是使用 logrus,否则请遵循包的概念并坚持使用结构化输出:

logrus.WithFields(logrus.Fields{
    "id": "100",
    "event": "Click",
    "os": "Android",
}).Info("Hooray, we have some users!")

// Output:
// time="2015-11-19T15:20:32+01:00" level=info msg="Hooray, we have some users!" event=Click id=100 os=Android

【讨论】:

  • 这真的很有帮助。我尝试使用记录器的原因是记录器会处理文件处理和日常滚动吗?是否有任何记录器可以处理文件滚动并仅打印消息?
  • 标准记录器和 logrus 都不能滚动日志文件。您可以使用 lumberjack 包(可与任何 io.WriteCloser 一起使用)来实现此功能,尽管我通常从外部通过流程主管(如 supervisord)执行此操作。
猜你喜欢
  • 1970-01-01
  • 2015-06-23
  • 2023-03-21
  • 2013-05-13
  • 1970-01-01
  • 2022-12-16
  • 1970-01-01
  • 1970-01-01
  • 2021-06-04
相关资源
最近更新 更多