logger

package module
v0.0.33 Latest Latest
Warning

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

Go to latest
Published: Sep 4, 2026 License: MIT Imports: 15 Imported by: 2

README

日志模块

概述

logger 模块负责创建 kratos-kit 的统一日志实现,并为应用附加标准字段(如 callertrace_idspan_id)。当前模块基于 Kratos v3 与标准库 log/slog

当前行为

  • logger.NewLoggerProvider 会为应用初始化全局日志实例,并注入标准日志字段。
  • bootstrap 在启动阶段会调用 log.SetDefault(ctx.logger),因此通过 Kratos v3 log 包输出的结构化日志会统一进入当前应用日志链路。
  • zaplogruszerolog 的文本格式统一为 时间 LEVEL caller 消息 结构化字段
  • 控制台输出保留绝对路径 caller,便于在 IDE 或终端中直接点击源码。
  • 文件输出根据 caller 源码附近最近的 go.mod 生成 module/相对路径:行号,例如 github.com/liujitcn/kratos-core/data/base_log.go:25
  • GORM/SQL 日志优先使用业务层传入的 caller;同时兼容从旧日志消息首段推断 caller,SQL 正文保持不变。
  • fluentaliyuntencentlevelmsgcaller、业务字段上传结构化日志,caller 使用 module 路径。
  • trace_idspan_id 以及重复的 service.* 标准字段会被过滤。

使用说明

启用具体日志实现时,需要通过匿名导入触发工厂注册,例如:

import (
	_ "github.com/liujitcn/kratos-kit/logger/zap"
)

完成注册后,应用启动阶段会根据配置中的 logger.type 创建对应日志实现。

Logrus 配置

filepath 为空时仅输出控制台;配置目录后写入 info.log,并可通过 enable_console 同时输出控制台。文件输出始终关闭颜色并清理 ANSI 控制码。

logger:
  type: logrus
  logrus:
    level: debug
    formatter: text
    timestamp_format: "2006-01-02 15:04:05.000"
    filepath: ./data/logs
    max_size: 100
    max_age: 30
    max_backups: 5
    enable_console: true

Zerolog 配置

writer 默认为 stdout,还支持 stderrconsolefilelumberjack。文件类 writer 将 filepath 视为目录并写入 info.log

logger:
  type: zerolog
  zerolog:
    level: debug
    writer: lumberjack
    filepath: ./data/logs
    max_size: 100
    max_age: 30
    max_backups: 5
    enable_console: true

Documentation

Index

Constants

View Source
const (
	// CallerKey 表示日志调用位置字段名。
	CallerKey = "caller"
)

Variables

This section is empty.

Functions

func CleanANSI added in v0.0.29

func CleanANSI(text string) string

CleanANSI 移除文本中的 ANSI 控制码。

func FormatConsoleCaller added in v0.0.29

func FormatConsoleCaller(caller string) string

FormatConsoleCaller 格式化控制台 caller,保留可点击的绝对源码路径。

func FormatFields added in v0.0.29

func FormatFields(fields map[string]any) (string, error)

FormatFields 将结构化字段编码为与 zap 控制台一致的单行 JSON。

func FormatFileCaller added in v0.0.29

func FormatFileCaller(caller string) string

FormatFileCaller 格式化文件或远程日志 caller,输出“Go module/相对路径:行号”。

func InferCallerFromMessage added in v0.0.29

func InferCallerFromMessage(message string) string

InferCallerFromMessage 尝试从日志消息首段提取“文件:行号”调用位置。

func NewLegacyLogger

func NewLegacyLogger(logger LegacyLogger) *slog.Logger

NewLegacyLogger 将旧版 Kratos Logger 适配为 Kratos v3 使用的 slog.Logger。

func NewLogger

func NewLogger(cfg *configv1.Logger) (*slog.Logger, error)

NewLogger 动态创建日志实例

func NewLoggerProvider

func NewLoggerProvider(cfg *configv1.Logger, appInfo *configv1.AppInfo) *slog.Logger

NewLoggerProvider 创建一个新的日志记录器提供者 它会从 cfg 创建具体 logger,并为 logger 附加 service.* 标准字段。

func NewMultiHandler added in v0.0.27

func NewMultiHandler(handlers ...slog.Handler) slog.Handler

NewMultiHandler 创建向多个 slog Handler 分发日志的复合 Handler。

func NewMultiLogger added in v0.0.27

func NewMultiLogger(handlers ...slog.Handler) *slog.Logger

NewMultiLogger 创建向多个 slog Handler 分发日志的 Logger。

func NewStdLogger

func NewStdLogger() *slog.Logger

NewStdLogger 创建一个新的日志记录器 - Kratos内置,控制台输出

func ParseCaller added in v0.0.29

func ParseCaller(value any) string

ParseCaller 将 caller 值规范化为斜杠分隔的“文件:行号”格式。

func Register

func Register(typ Type, f FactoryFunc) error

Register 注册远程配置客户端构造函数

func Unregister

func Unregister(typ Type) bool

Unregister removes a registered factory by Type. It returns true if a factory was removed. Use with caution in concurrent environments (primarily intended for tests).

Types

type Entry added in v0.0.29

type Entry struct {
	// Message 为日志正文。
	Message string
	// Caller 为规范化后的“文件:行号”。
	Caller string
	// Fields 为过滤后按原始顺序保留的业务字段。
	Fields []Field
}

Entry 描述旧版 Kratos key/value 日志解析后的统一条目。

func ParseLegacyEntry added in v0.0.29

func ParseLegacyEntry(keyvals ...any) (Entry, error)

ParseLegacyEntry 解析旧版 Kratos key/value 日志并过滤重复的标准字段。

type FactoryFunc

type FactoryFunc func(cfg *configv1.Logger) (*slog.Logger, error)

func GetFactory

func GetFactory(typ Type) (FactoryFunc, bool)

GetFactory returns a registered FactoryFunc for a given Type and whether it existed. Safe for concurrent use.

type Field added in v0.0.29

type Field struct {
	// Key 为字段名。
	Key string
	// Value 为字段原始值。
	Value any
}

Field 描述一个按原始顺序保留的日志字段。

type LegacyLogger

type LegacyLogger interface {
	Log(level log.Level, keyvals ...any) error
}

LegacyLogger 兼容 Kratos v2 风格的 key/value 日志实现。

type Type

type Type string

Type 日志类型枚举

const (
	Std     Type = "std"
	Fluent  Type = "fluent"
	Logrus  Type = "logrus"
	Zap     Type = "zap"
	Aliyun  Type = "aliyun"
	Tencent Type = "tencent"
	Zerolog Type = "zerolog"
)

func ListFactories

func ListFactories() []Type

ListFactories returns a slice of currently registered Types.

Directories

Path Synopsis
aliyun module
fluent module
tencent module
zap module
zerolog module

Jump to

Keyboard shortcuts

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