lumberjack
是一个用于日志文件滚动和归档的 Go 语言库。它可以帮助你自动管理日志文件,防止日志文件变得过大,并且可以根据配置自动删除旧的日志文件。以下是 lumberjack
的详细使用方法和配置选项:
安装
首先,你需要安装 lumberjack
库。你可以使用 go get
命令来安装:
go get gopkg.in/natefinch/lumberjack.v2
基本用法
lumberjack
通常与日志库(如 logrus
)结合使用。以下是一个基本的示例,展示如何使用 lumberjack
和 logrus
:
package main
import (
"github.com/sirupsen/logrus"
"gopkg.in/natefinch/lumberjack.v2"
)
func main() {
// 配置 lumberjack
logrus.SetOutput(&lumberjack.Logger{
Filename: "app.log", // 日志文件名
MaxSize: 500, // 每个日志文件的最大大小(以 MB 为单位)
MaxBackups: 3, // 保留的旧日志文件的最大数量
MaxAge: 28, // 保留的旧日志文件的最大天数
Compress: true, // 是否压缩旧日志文件
})
// 使用 logrus 记录日志
logrus.Info("This is an info message")
logrus.Warning("This is a warning message")
logrus.Error("This is an error message")
}
配置选项
lumberjack
提供了多个配置选项,以便你根据需要自定义日志文件的管理方式。以下是一些常用的配置选项:
- Filename:日志文件的名称。
Filename: "app.log",
- MaxSize:每个日志文件的最大大小(以 MB 为单位)。当日志文件达到此大小时,会自动滚动创建新的日志文件。
MaxSize: 500, // 500 MB
- MaxBackups:保留的旧日志文件的最大数量。当达到此数量时,最旧的日志文件会被删除。
MaxBackups: 3,
- MaxAge:保留的旧日志文件的最大天数。当超过此天数时,最旧的日志文件会被删除。
MaxAge: 28, // 28 天
- Compress:是否压缩旧日志文件。压缩可以节省磁盘空间。
Compress: true,
- LocalTime:是否使用本地时间来命名滚动日志文件。默认使用 UTC 时间。
LocalTime: true,
结合其他日志库使用
结合 logrus
库使用 lumberjack
可以提供更强大的日志管理功能。以下是一个详细的示例,展示如何使用 lumberjack
和 logrus
:
package main
import (
"github.com/sirupsen/logrus"
"gopkg.in/natefinch/lumberjack.v2"
)
func main() {
// 配置 lumberjack
logrus.SetOutput(&lumberjack.Logger{
Filename: "app.log", // 日志文件名
MaxSize: 500, // 每个日志文件的最大大小(以 MB 为单位)
MaxBackups: 3, // 保留的旧日志文件的最大数量
MaxAge: 28, // 保留的旧日志文件的最大天数
Compress: true, // 是否压缩旧日志文件
})
// 设置 logrus 的日志级别
logrus.SetLevel(logrus.DebugLevel)
// 使用 logrus 记录日志
logrus.Info("This is an info message")
logrus.Debug("This is a debug message")
logrus.Warning("This is a warning message")
logrus.Error("This is an error message")
}
配置选项
lumberjack
提供了多个配置选项,以便你根据需要自定义日志文件的管理方式。以下是一些常用的配置选项:
- Filename:日志文件的名称。
Filename: "app.log",
- MaxSize:每个日志文件的最大大小(以 MB 为单位)。当日志文件达到此大小时,会自动滚动创建新的日志文件。
MaxSize: 500, // 500 MB
- MaxBackups:保留的旧日志文件的最大数量。当达到此数量时,最旧的日志文件会被删除。
MaxBackups: 3,
- MaxAge:保留的旧日志文件的最大天数。当超过此天数时,最旧的日志文件会被删除。
MaxAge: 28, // 28 天
- Compress:是否压缩旧日志文件。压缩可以节省磁盘空间。
Compress: true,
- LocalTime:是否使用本地时间来命名滚动日志文件。默认使用 UTC 时间。
LocalTime: true,
结合 logrus
的高级用法
你还可以为不同的日志级别设置不同的输出目标,或者为不同的模块设置不同的日志文件。以下是一个高级用法的示例:
package main
import (
"os"
"github.com/sirupsen/logrus"
"gopkg.in/natefinch/lumberjack.v2"
)
func main() {
// 配置 lumberjack 用于 info 级别的日志
infoLogger := &lumberjack.Logger{
Filename: "info.log",
MaxSize: 500,
MaxBackups: 3,
MaxAge: 28,
Compress: true,
}
// 配置 lumberjack 用于 error 级别的日志
errorLogger := &lumberjack.Logger{
Filename: "error.log",
MaxSize: 500,
MaxBackups: 3,
MaxAge: 28,
Compress: true,
}
// 创建 logrus 的实例
logger := logrus.New()
// 设置 info 级别的日志输出目标
logger.SetLevel(logrus.InfoLevel)
logger.SetOutput(infoLogger)
// 设置 error 级别的日志输出目标
logger.AddHook(&errorHook{writer: errorLogger})
// 使用 logrus 记录日志
logger.Info("This is an info message")
logger.Error("This is an error message")
}
// errorHook 是一个自定义的 logrus 钩子,用于将 error 级别的日志输出到指定的 writer
type errorHook struct {
writer *lumberjack.Logger
}
// Fire 方法会在每次记录日志时被调用
func (h *errorHook) Fire(entry *logrus.Entry) error {
if entry.Level <= logrus.ErrorLevel {
line, err := entry.String()
if err != nil {
return err
}
h.writer.Write([]byte(line))
}
return nil
}
// Levels 方法返回需要处理的日志级别
func (h *errorHook) Levels() []logrus.Level {
return []logrus.Level{
logrus.ErrorLevel,
logrus.FatalLevel,
logrus.PanicLevel,
}
}