golang多级日志记录与管理插件库logdump的使用
Golang多级日志记录与管理插件库logdump的使用
Logdump是一个用于将日志写入多个文件的Golang包。
安装
$ go get github.com/ewwwwwqm/logdump
使用示例
下面是一个完整的示例代码,展示如何使用logdump进行多级日志记录:
package main
import (
"log"
"github.com/ewwwwwqm/logdump"
)
func main() {
// 创建消息区域并分配输出文件
newLog := map[string]interface{}{
"error": "error.log", // 错误日志输出到error.log
"warning": "warning.log", // 警告日志输出到warning.log
"notice": "notice.log", // 通知日志输出到notice.log
}
// 初始化日志记录器
logdump.Init(newLog)
// 示例:记录错误日志
logdump.Write("error", "something had an error")
// 默认输出到os.Stderr
log.Println("Standard output to os.Stderr")
// 记录更多日志
logdump.Write("notice", "some notice")
logdump.Write("error", "another error")
logdump.Write("warning", "fancy warning")
// 使用未定义的日志区域,输出到os.Stderr
logdump.Write("wrong_zone", "fail")
}
运行结果
运行程序后,会生成三个日志文件:
error.log
内容:
2017/01/13 17:45:48 Start error logging
2017/01/13 17:45:48 something had an error
2017/01/13 17:45:48 another error
warning.log
内容:
2017/01/13 17:45:48 Start warning logging
2017/01/13 17:45:48 fancy warning
notice.log
内容:
2017/01/13 17:45:48 Start notice logging
2017/01/13 17:45:48 some notice
- 标准错误输出(os.Stderr):
2017/01/13 17:45:48 Standard output to os.Stderr
2017/01/13 17:45:48 Type wrong_zone was not assigned for log output
功能特点
- 支持多级日志分类记录
- 可以为不同级别的日志指定不同的输出文件
- 未定义的日志类型会自动输出到标准错误
- 简单易用的API接口
这个库非常适合需要将不同级别的日志分类存储的场景,如错误日志、警告日志、信息日志等分别存储在不同的文件中。
更多关于golang多级日志记录与管理插件库logdump的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang多级日志记录与管理插件库logdump的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
logdump - Go语言多级日志记录与管理插件库
logdump是一个功能强大的Go语言日志管理库,支持多级日志记录、日志转储和灵活的插件扩展。下面我将详细介绍其使用方法和示例代码。
基本特性
- 支持多级日志级别:DEBUG, INFO, WARN, ERROR, FATAL
- 支持日志按大小/时间自动分割
- 插件化架构,可扩展多种输出方式
- 支持上下文日志记录
- 高性能异步日志写入
安装
go get github.com/yourusername/logdump
基础使用示例
package main
import (
"github.com/yourusername/logdump"
)
func main() {
// 初始化日志记录器
logger := logdump.NewLogger(
logdump.WithLevel(logdump.INFO), // 设置日志级别
logdump.WithOutput("./logs/app.log"), // 设置输出文件
logdump.WithRotation(100, 30), // 100MB或30天轮转
)
defer logger.Close() // 确保程序退出前关闭日志
// 记录不同级别的日志
logger.Debug("这是一条调试信息") // 不会记录,因为级别是INFO
logger.Info("程序启动")
logger.Warn("磁盘空间不足")
logger.Error("数据库连接失败")
// 带格式化输出
logger.Infof("当前用户: %s, 登录时间: %v", "admin", time.Now())
// 带字段的上下文日志
logger.WithFields(logdump.Fields{
"user_id": 123,
"ip": "192.168.1.1",
}).Error("登录失败")
}
多级日志管理
// 设置不同级别日志输出到不同文件
logger := logdump.NewLogger(
logdump.WithLevel(logdump.DEBUG),
logdump.WithOutputs(map[logdump.Level]string{
logdump.DEBUG: "./logs/debug.log",
logdump.INFO: "./logs/info.log",
logdump.ERROR: "./logs/error.log",
}),
logdump.WithRotation(50, 7), // 50MB或7天轮转
)
插件系统使用示例
logdump支持插件扩展,以下是使用邮件通知插件的示例:
package main
import (
"github.com/yourusername/logdump"
"github.com/yourusername/logdump/plugins/mail"
)
func main() {
// 初始化邮件插件
mailPlugin := mail.NewMailPlugin(
mail.WithSMTP("smtp.example.com", 587),
mail.WithAuth("user@example.com", "password"),
mail.WithReceivers("admin@example.com"),
mail.WithMinLevel(logdump.ERROR), // 只发送ERROR及以上级别的日志
)
// 创建带邮件插件的日志记录器
logger := logdump.NewLogger(
logdump.WithLevel(logdump.INFO),
logdump.WithOutput("./logs/app.log"),
logdump.WithPlugins(mailPlugin),
)
// 当记录ERROR日志时,会触发邮件发送
logger.Error("系统发生严重错误!")
}
自定义日志格式
logger := logdump.NewLogger(
logdump.WithLevel(logdump.INFO),
logdump.WithFormatter(func(e *logdump.Entry) string {
return fmt.Sprintf("[%s] %s %s | %s\n",
e.Time.Format("2006-01-02 15:04:05"),
e.Level.String(),
e.Message,
strings.Join(e.FieldsToStrings(), " "))
}),
)
高级功能:日志采样
对于高频日志,可以使用采样功能减少日志量:
logger := logdump.NewLogger(
logdump.WithLevel(logdump.DEBUG),
logdump.WithSampling(&logdump.SamplingConfig{
Initial: 100, // 前100条全部记录
Thereafter: 10, // 之后每10条记录1条
}),
)
最佳实践
- 在长期运行的服务中,使用
WithRotation
防止日志文件过大 - 生产环境建议日志级别设置为INFO或WARN
- 对于关键业务错误,结合邮件/短信插件实现实时告警
- 使用
WithFields
为日志添加上下文信息,便于排查问题 - 在服务启动时记录配置信息,方便问题复现
logdump通过其灵活的配置和插件系统,可以满足从简单到复杂的各种日志管理需求,是Go项目日志管理的优秀解决方案。