logger

package
v1.5.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 4, 2026 License: MIT Imports: 7 Imported by: 0

README

Logger

logger 包提供基于 zap 的日志封装,并通过 otelzap 把日志桥接到 OpenTelemetry。

功能

  • Console:输出到 stdout,面向本地开发和人工排障
  • Remote:输出到 OpenTelemetry,面向集中采集、检索与关联分析

设计边界

  • logger 不再依赖业务服务的 BootstrapConfig 接口或 app.Config 结构。
  • logger 初始化只接收自己需要的最小输入:
    • logger.Config
  • 业务服务负责在启动层把自己的引导配置映射为 logger.Config,再调用本库。

这意味着:

  • 业务侧可以继续保留自己的 BootstrapConfig
  • logger 不需要 import 业务侧启动配置模型
  • 配置模型和初始化能力边界更清晰

初始化方式

当前入口为:

func NewZapLogger(config *Config) *zap.Logger

其中:

  • config.Console=true 时启用 console 输出
  • config.Remote=true 时启用 OpenTelemetry 输出

使用示例

package main

import (
	"context"

	"github.com/fireflycore/go-micro/logger"
	"go.uber.org/zap"
)

func main() {
	cfg := &logger.Config{
		Console: true,
		Remote:  true,
	}

	zl := logger.NewZapLogger(cfg)
	log := logger.NewAccessLogger(zl)

	log.WithContextInfo(context.Background(), "hello", zap.String("k", "v"))
}

与业务启动配置的关系

推荐在业务服务自己的启动配置中聚合各库配置,例如:

type BootstrapConfig struct {
	App struct {
		Name string `json:"name"`
	} `json:"app"`

	Logger logger.Config `json:"logger"`
}

然后在组合根中做一次映射:

zl := logger.NewZapLogger(&conf.Logger)

这种做法的核心是:

  • 业务服务拥有自己的启动配置模型
  • 基础库只接收最小输入
  • 配置聚合和依赖装配都放在业务服务启动层完成

Trace 关联

当启用 Remote 输出且服务已初始化 OpenTelemetry Logs Provider 后:

  • 如果日志 fields 中包含 zap.Any("ctx", ctx)otelzap 会从 ctx 中提取 span context,并关联到 OTLP log record
  • 为避免普通 zap console 输出把整个 ctx 结构直接序列化,本库只让 OTel bridge core 消费原始 ctx
  • AccessLoggerServerLoggerWithContextInfo / WithContextWarn / WithContextError 已内置 trace_idspan_idctx 注入

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewConsoleCore added in v1.0.3

func NewConsoleCore(level zapcore.LevelEnabler) zapcore.Core

NewConsoleCore 构造一个输出到 stdout 的 console encoder core。

设计要点: - 采用 ProductionEncoderConfig,字段与 zap 默认生产格式保持一致 - 通过自定义 EncodeTime/EncodeLevel/EncodeCaller,把输出变成更利于人读的形式 - 返回的 Core 可与 JSON Core 通过 zapcore.NewTee 合并

func NewContextOmittingCore added in v1.5.0

func NewContextOmittingCore(core zapcore.Core) zapcore.Core

NewContextOmittingCore 为普通 core 套上一层上下文字段过滤。

func NewZapLogger added in v1.0.3

func NewZapLogger(config *Config) *zap.Logger

NewZapLogger 根据配置构造统一的 zap logger。

Types

type AccessLogger added in v0.8.3

type AccessLogger struct {
	*zap.Logger
}

AccessLogger 是访问日志的轻量封装。

func NewAccessLogger added in v1.1.8

func NewAccessLogger(logger *zap.Logger) *AccessLogger

NewAccessLogger 用底层 zap logger 构造访问日志实例。

func (*AccessLogger) WithContextError added in v1.1.8

func (l *AccessLogger) WithContextError(ctx context.Context, msg string, fields ...zap.Field)

WithContextError 记录带上下文的 error 级访问日志。

func (*AccessLogger) WithContextInfo added in v1.1.8

func (l *AccessLogger) WithContextInfo(ctx context.Context, msg string, fields ...zap.Field)

WithContextInfo 记录带上下文的 info 级访问日志。

func (*AccessLogger) WithContextWarn added in v1.1.8

func (l *AccessLogger) WithContextWarn(ctx context.Context, msg string, fields ...zap.Field)

WithContextWarn 记录带上下文的 warn 级访问日志。

type Config added in v1.4.3

type Config struct {
	Console bool `json:"console"`
	Remote  bool `json:"remote"`
}

type ContextOmittingCore added in v1.5.0

type ContextOmittingCore struct {
	// contains filtered or unexported fields
}

ContextOmittingCore 包装普通 zap core,专门过滤掉原始 context 字段。

func (ContextOmittingCore) Check added in v1.5.0

Check 决定当前 entry 是否应由该 core 参与写出。

func (ContextOmittingCore) Enabled added in v1.5.0

func (c ContextOmittingCore) Enabled(level zapcore.Level) bool

Enabled 直接复用底层 core 的等级判断逻辑。

func (ContextOmittingCore) Sync added in v1.5.0

func (c ContextOmittingCore) Sync() error

Sync 把 flush 动作透传给底层 core。

func (ContextOmittingCore) With added in v1.5.0

func (c ContextOmittingCore) With(fields []zapcore.Field) zapcore.Core

With 在继承字段时先去掉 context 字段,避免它进入普通输出链路。

func (ContextOmittingCore) Write added in v1.5.0

func (c ContextOmittingCore) Write(ent zapcore.Entry, fields []zapcore.Field) error

Write 在真正写日志前再次过滤原始 context 字段。

type ServerLogger added in v0.9.1

type ServerLogger struct {
	*zap.Logger
}

func NewServerLogger added in v1.1.8

func NewServerLogger(logger *zap.Logger) *ServerLogger

NewServerLogger 用底层 zap logger 构造服务日志实例。

func (*ServerLogger) WithContextError added in v1.1.8

func (l *ServerLogger) WithContextError(ctx context.Context, msg string, fields ...zap.Field)

WithContextError 记录带上下文的 error 级服务日志。

func (*ServerLogger) WithContextInfo added in v1.1.8

func (l *ServerLogger) WithContextInfo(ctx context.Context, msg string, fields ...zap.Field)

WithContextInfo 记录带上下文的 info 级服务日志。

func (*ServerLogger) WithContextWarn added in v1.1.8

func (l *ServerLogger) WithContextWarn(ctx context.Context, msg string, fields ...zap.Field)

WithContextWarn 记录带上下文的 warn 级服务日志。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL