本文介绍在 Linux 系统中管理 Go 语言日志的几种方法,涵盖标准库、第三方库以及日志轮转和配置文件等方面。
一、利用标准库 log
包
Go 标准库提供基础的日志记录功能,支持输出到控制台或文件。示例如下:
package main import ( "log" "os" ) func main() { logFile, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if err != nil { log.Fatal(err) } defer logFile.Close() log.SetOutput(logFile) log.SetFlags(log.LstdFlags | log.Lshortfile) log.Println("日志信息") log.Printf("带参数的日志信息: %s", "参数值") }
二、使用第三方日志库
为了更强大的功能,推荐使用第三方日志库:
1. logrus: logrus 功能丰富,支持日志级别、格式化、轮转和钩子等。
package main import ( "github.com/sirupsen/logrus" "os" ) func main() { logger := logrus.New() logger.SetLevel(logrus.DebugLevel) logFile, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if err != nil { logger.Fatal(err) } defer logFile.Close() logger.SetOutput(logFile) logger.WithFields(logrus.Fields{"事件": "重要事件"}).Info("日志信息") }
2. zap: zap 以高性能和可定制性见长,来自 Uber。
package main import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" "gopkg.in/natefinch/lumberjack.v2" ) func main() { config := zap.NewProductionConfig() config.OutputPaths = []string{"stdout", "app.log"} w := zapcore.AddSync(&lumberjack.Logger{ Filename: "app.log", MaxSize: 5, // MB MaxBackups: 3, MaxAge: 28, // days }) config.OutputPaths = []string{"app.log"} logger, _ := config.Build(zapcore.AddSync(w)) defer logger.Sync() logger.Info("zap 日志信息") }
三、日志轮转与归档
lumberjack
库可以实现日志轮转,避免单文件过大。 以上 zap 示例已包含 lumberjack 的使用。
四、基于配置文件管理日志
使用 TOML 或 YAML 等配置文件,可以灵活配置日志路径、级别等。 (此处省略配置文件示例及读取配置的代码,可参考原文)
通过以上方法,可以有效管理 Go 应用在 Linux 系统中的日志。 选择合适的库和方法取决于应用的具体需求和规模。