是否有GoLang记录器允许以不同的格式登录到控制台以及日志文件

时间:2016-07-17 23:55:31

标签: go

我来自node.js背景,并且对许多记录器(例如winston)感到满意,这些记录器允许将可配置的格式化输出到多个源(例如控制台)以及日志文件,其中每个记录器的输出可能是格式不同。

我正在尝试与GoLang做类似的事情,并且很难找到支持此功能的日志包。

是否有可用于实现此结果的GoLang包?

3 个答案:

答案 0 :(得分:3)

以下是使用Sirupsen/logrus

实现此目标的示例
package main

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

// Create a new instance of the logger. You can have any number of instances.
var log1 = logrus.New()
var log2 = logrus.New()

func main() {
  // The API for setting attributes is a little different than the package level
  // exported logger. See Godoc.
  log1.Out = os.Stderr
  log1.Formatter = &logrus.TextFormatter{}

  LogOutputFile, err := os.OpenFile("out.log", os.O_RDWR | os.O_CREATE | os.O_APPEND, 0666)
  if err != nil {
    logrus.Fatalf("error opening file: %v", err) 
  }  

  log2.Out = LogOutputFile
  log2.Formatter = &logrus.JSONFormatter{}

  log1.WithFields(logrus.Fields{
    "animal": "walrus",
    "size":   10,
  }).Info("A group of walrus emerges from the ocean")

  log2.WithFields(logrus.Fields{
    "animal": "walrus",
    "size":   10,
  }).Info("A group of walrus emerges from the ocean")

}

答案 1 :(得分:2)

logrus已在此处提及,它可以使用hooks准确地为您提供所需内容。挂钩可以使用不同的格式将日志发送到不同的目的地。您可以在文档中找到钩子列表,例如将日志发送到InfluxDB或Logstash。您甚至可以根据自己的需要实现自己的钩子。

答案 2 :(得分:0)

您可以使用rlog。我们将其开发为一个非常可配置且重量轻的记录器,除了标准的Golang库之外没有任何依赖性。

默认情况下,它只会记录到stderr或stdout,但您也可以指定日志文件,或者除了正常输出之外,这正是您要求的。

目前,在这种情况下,它不支持不同输出格式的想法。能不能给我一个你想看的不同格式的例子?也许我们可以实施它。