GoWind 开源生态GoWind 开源生态
首页
框架
GoWind Admin
GoWind CMS
GoWind IM
GoWind UBA
GoWind IoT
GoWind Toolkit
GoWind Quant
GitHub
首页
框架
GoWind Admin
GoWind CMS
GoWind IM
GoWind UBA
GoWind IoT
GoWind Toolkit
GoWind Quant
GitHub
  • 介绍

    • GoWind 框架
    • 框架整体架构
  • go-wind 核心

    • go-wind 核心框架
    • App 生命周期管理
    • Context 传播
    • Transport 抽象
    • Log 门面接口
  • go-wind-plugins 插件

    • go-wind-plugins 插件总览
    • 插件配置系统
    • 插件注册机制(SPI)
    • 日志适配插件
    • 传输协议插件
    • 消息中间件插件
    • 编码解码插件
    • 安全与认证插件
    • 链路追踪插件
    • 缓存插件
    • 对象存储插件(OSS)
    • 限流插件
    • 指标监控插件
    • AI 插件
    • 工作流插件
    • 数据库与缓存插件
    • Bootstrap 集成与网关插件
    • 压缩与序列化插件
    • 模板渲染与验证插件
  • go-wind-bootstrap 启动器

    • go-wind-bootstrap 声明式启动器
    • Bootstrap 配置系统
    • Bootstrap SPI 机制
    • 声明式中间件编排
    • Bootstrap CLI 工具
    • Bootstrap 实战示例
  • 教程

    • 快速入门教程
    • 自定义插件开发教程
    • 多协议同时监听教程
    • 框架迁移指南

Log 门面接口

go-wind 的 Log 模块是一个极简日志门面,只定义接口不提供实现。具体实现由 go-wind-plugins 的适配器提供(Zap、Zerolog、Logrus 等)。

一、Logger 接口

// log/log.go
type Level int

const (
    LevelDebug Level = iota
    LevelInfo
    LevelWarn
    LevelError
    LevelFatal
)

type Logger interface {
    Log(level Level, msg string, fields ...Field)
    Enabled(level Level) bool
    With(fields ...Field) Logger
}

type Field struct {
    Key   string
    Value interface{}
}

二、使用方式

2.1 直接使用全局 Logger

import "github.com/tx7do/go-wind/log"

func main() {
    log.Info("service started", log.String("addr", ":8080"))
    log.Error("connection failed", log.Err(err))
    log.Debug("debug info", log.Int("count", 42))
}

2.2 字段辅助函数

log.String("key", "value")
log.Int("count", 42)
log.Float64("ratio", 0.95)
log.Bool("enabled", true)
log.Err(err)
log.Duration("elapsed", time.Since(start))
log.Any("data", customValue)

2.3 带上下文的 Logger

logger := log.With(log.String("service", "order"), log.String("trace_id", traceID))
logger.Info("processing order")     // 自动携带 service 和 trace_id
logger.Error("order failed", log.Err(err))

三、全局注册

// log/global.go
var global Logger = &nopLogger{}

func SetLogger(l Logger) {
    global = l
}

func Default() Logger {
    return global
}

插件通过 init 自动注册:

// go-wind-plugins/log/zap/logger.go
func init() {
    log.SetLogger(NewZapLogger())
}

四、NoOp 实现

核心框架内置一个空实现的 Logger,确保在没有导入任何日志插件时不会 panic:

type nopLogger struct{}

func (n *nopLogger) Log(level Level, msg string, fields ...Field) {}
func (n *nopLogger) Enabled(level Level) bool { return false }
func (n *nopLogger) With(fields ...Field) Logger { return n }

五、适配器列表

适配器插件路径说明
Zapplugins/log/zap高性能结构化日志
Zerologplugins/log/zerolog零分配 JSON 日志
Logrusplugins/log/logrus流行结构化日志
Lokiplugins/log/lokiGrafana Loki 远程日志
Sentryplugins/log/sentrySentry 错误追踪
CloudWatchplugins/log/cloudwatchAWS CloudWatch
Aliyun SLSplugins/log/aliyun_sls阿里云日志服务

相关文档

  • 核心框架介绍
  • 日志适配插件
  • 声明式启动器介绍
Edit this page
Last Updated:: 6/21/26, 9:28 PM
Contributors: Bobo
Prev
Transport 抽象