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")
}

运行结果

运行程序后,会生成三个日志文件:

  1. 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
  1. warning.log 内容:
2017/01/13 17:45:48 Start warning logging
2017/01/13 17:45:48 fancy warning
  1. notice.log 内容:
2017/01/13 17:45:48 Start notice logging
2017/01/13 17:45:48 some notice
  1. 标准错误输出(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

功能特点

  1. 支持多级日志分类记录
  2. 可以为不同级别的日志指定不同的输出文件
  3. 未定义的日志类型会自动输出到标准错误
  4. 简单易用的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条
	}),
)

最佳实践

  1. 在长期运行的服务中,使用WithRotation防止日志文件过大
  2. 生产环境建议日志级别设置为INFO或WARN
  3. 对于关键业务错误,结合邮件/短信插件实现实时告警
  4. 使用WithFields为日志添加上下文信息,便于排查问题
  5. 在服务启动时记录配置信息,方便问题复现

logdump通过其灵活的配置和插件系统,可以满足从简单到复杂的各种日志管理需求,是Go项目日志管理的优秀解决方案。

回到顶部