lazygophers/log

Go Version Test Coverage Go Report Card License: MIT

一个高性能、灵活的 Go 日志库,基于 zap 构建,提供丰富的功能和简洁的 API。

📖 文档语言

✨ 特性

  • 🚀 高性能:基于 zap 构建,采用对象池复用 Entry 对象,减少内存分配
  • 📊 丰富的日志级别:支持 Trace、Debug、Info、Warn、Error、Fatal、Panic 级别
  • ⚙️ 灵活的配置
    • 日志级别控制
    • 调用者信息记录
    • 追踪信息(包括 goroutine ID)
    • 自定义日志前缀和后缀
    • 自定义输出目标(控制台、文件等)
    • 日志格式化选项
  • 🔄 文件轮转:支持每小时日志文件轮转
  • 🔌 Zap 兼容性:与 zap WriteSyncer 无缝集成
  • 🎯 简洁的 API:类似标准日志库的清晰 API,易于使用

🚀 快速开始

安装

go get github.com/lazygophers/log

基本用法

package main

import (
    "github.com/lazygophers/log"
)

func main() {
    // 使用默认全局 logger
    log.Debug("调试信息")
    log.Info("普通信息")
    log.Warn("警告信息")
    log.Error("错误信息")

    // 使用格式化输出
    log.Infof("用户 %s 登录成功", "admin")

    // 自定义配置
    customLogger := log.New().
        SetLevel(log.InfoLevel).
        EnableCaller(false).
        SetPrefixMsg("[MyApp]")

    customLogger.Info("这是来自自定义 logger 的日志")
}

📚 高级用法

带文件输出的自定义 Logger

package main

import (
    "os"
    "github.com/lazygophers/log"
)

func main() {
    // 创建带文件输出的 logger
    logger := log.New().
        SetLevel(log.DebugLevel).
        EnableCaller(true).
        EnableTrace(true).
        SetOutput(os.Stdout, log.GetOutputWriterHourly("/var/log/myapp.log"))

    logger.Debug("带调用者信息的调试日志")
    logger.Info("带追踪信息的普通日志")
}

日志级别控制

package main

import "github.com/lazygophers/log"

func main() {
    logger := log.New().SetLevel(log.WarnLevel)

    // 只有 warn 及以上级别会被记录
    logger.Debug("这不会被记录")  // 忽略
    logger.Info("这不会被记录")   // 忽略
    logger.Warn("这会被记录")    // 记录
    logger.Error("这会被记录")   // 记录
}

🔧 配置选项

Logger 配置

方法 描述 默认值
SetLevel(level) 设置最低日志级别 DebugLevel
EnableCaller(enable) 启用/禁用调用者信息 false
EnableTrace(enable) 启用/禁用追踪信息 false
SetCallerDepth(depth) 设置调用者深度 2
SetPrefixMsg(prefix) 设置日志前缀 ""
SetSuffixMsg(suffix) 设置日志后缀 ""
SetOutput(writers...) 设置输出目标 os.Stdout

日志级别

级别 描述
TraceLevel 最详细,用于详细跟踪
DebugLevel 调试信息
InfoLevel 普通信息
WarnLevel 警告信息
ErrorLevel 错误信息
FatalLevel 致命错误(调用 os.Exit(1))
PanicLevel 恐慌错误(调用 panic())

🏗️ 架构

核心组件

  • Logger:主日志结构,具有可配置的级别、输出、格式化器和调用者深度
  • Entry:单个日志记录,包含全面的元数据支持
  • Level:日志级别定义和工具函数
  • Format:日志格式化接口和实现

性能优化

  • 对象池:重用 Entry 对象以减少内存分配
  • 条件记录:仅在需要时记录昂贵字段
  • 快速级别检查:在最外层检查日志级别
  • 无锁设计:大多数操作不需要锁

📊 性能比较

特性 lazygophers/log zap logrus 标准日志
性能
API 简洁性
功能丰富度
灵活性
学习曲线

🔗 相关文档

🚀 获取帮助

📄 许可证

本项目采用 MIT 许可证 - 详见 LICENSE 文件。

🤝 贡献

我们欢迎贡献!请查看我们的 贡献指南 了解详情。


lazygophers/log 旨在成为重视性能和简洁性的 Go 开发者的首选日志解决方案。无论您是构建小型工具还是大规模分布式系统,该库都能提供功能和易用性之间的良好平衡。