logrus 输出多个文件_Golang-logrus简单的日志收集系统(替代ELKB)
时间: 2024-01-21 20:20:08 浏览: 28
在使用 logrus 输出日志的过程中,我们可以通过 Hook 的方式将日志同时输出到多个文件中,下面是示例代码:
```go
package main
import (
"os"
log "github.com/sirupsen/logrus"
)
func main() {
// 创建一个新的日志记录器
logger := log.New()
// 创建第一个日志文件
file1, err := os.OpenFile("log1.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err == nil {
logger.SetOutput(file1)
} else {
logger.Info("Failed to log to file, using default stderr")
}
// 创建第二个日志文件
file2, err := os.OpenFile("log2.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err == nil {
logger.AddHook(&logrusWriter{file2})
} else {
logger.Info("Failed to log to file, using default stderr")
}
// 输出日志
logger.Info("Hello world!")
}
// logrusWriter 将日志输出到指定的 io.Writer
type logrusWriter struct {
writer io.Writer
}
func (writer *logrusWriter) Fire(entry *log.Entry) error {
if _, err := writer.writer.Write([]byte(entry.Message)); err != nil {
return err
}
return nil
}
func (writer *logrusWriter) Levels() []log.Level {
return []log.Level{
log.PanicLevel,
log.FatalLevel,
log.ErrorLevel,
log.WarnLevel,
log.InfoLevel,
log.DebugLevel,
}
}
```
在上面的示例代码中,我们创建了两个日志文件,分别为 `log1.log` 和 `log2.log`,并使用 `logrusWriter` 将日志同时输出到这两个文件中。可以根据需要添加更多的文件和 `logrusWriter` 实例。