我正在使用 supervisord 来运行我的 golang 应用程序。我的supervisord conf看起来像
[program:go_web]
command=go-web-app
autostart=true
autorestart=true
startsecs=3
stdout_logfile=/var/log/app.log
stderr_logfile=/var/log/app_error.log
我的 logrus 设置看起来:package main
import (
"github.com/sirupsen/logrus"
log "github.com/sirupsen/logrus"
)
func main() {
log.SetFormatter(&logrus.TextFormatter{
ForceColors: true,
})
log.Info("this is an info")
log.Error("this is an error")
}
但是我发现两个日志都在我的错误日志中 /var/log/app_error.log
INFO[0000] this is an info
ERRO[0000] this is an error
如何将信息记录到我的应用程序日志 /var/log/app.log
并将错误记录到错误日志 var/log/app_error.log
自动地。谢谢
最佳答案
struct
实现 Writer
接口(interface),并将您的条件逻辑放在那里,即应根据日志级别将日志写入何处。 type OutputSplitter struct{}
func (splitter *OutputSplitter) Write(p []byte) (n int, err error) {
// your logs filter logic here. For ex:
if bytes.Contains(p, []byte("level=error")) {
return os.Stderr.Write(p)
}
return os.Stdout.Write(p)
}
然后使用该结构通过 logrus 写入日志。logrus.SetOutput(&OutputSplitter{})
/var/log/app_error.log
其他人会去/var/log/app.log
关于golang如何自动将logrus错误写入supervisord stderr_logfile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63661628/