我来自node.js背景,并且对许多记录器(例如winston)感到满意,这些记录器允许将可配置的格式化输出到多个源(例如控制台)以及日志文件,其中每个记录器的输出可能是格式不同。
我正在尝试与GoLang做类似的事情,并且很难找到支持此功能的日志包。
是否有可用于实现此结果的GoLang包?
答案 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,但您也可以指定日志文件,或者除了正常输出之外,这正是您要求的。
目前,在这种情况下,它不支持不同输出格式的想法。能不能给我一个你想看的不同格式的例子?也许我们可以实施它。