log

package
v0.0.1 Latest Latest
Warning

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

Go to latest
Published: Feb 25, 2025 License: MIT Imports: 6 Imported by: 1

README

Log 包

log 包提供了一个统一的日志接口和多种日志实现,支持结构化日志记录和多个日志级别。

特性

  • 统一的日志接口
  • 多种日志后端支持(标准输出、Logrus)
  • 结构化日志记录
  • 多个日志级别(Debug、Info、Warn、Error、Fatal)
  • 支持文件和标准输出
  • 支持字段注入和上下文

快速开始

基本使用
package main

import "github.com/fsyyft-go/kit/log"

func main() {
    // 初始化标准输出日志
    if err := log.InitLogger(log.LogTypeStd, ""); err != nil {
        panic(err)
    }

    // 记录不同级别的日志
    log.Debug("这是一条调试日志")
    log.Info("这是一条信息日志")
    log.Warn("这是一条警告日志")
    log.Error("这是一条错误日志")
}
结构化日志
// 添加单个字段
log.WithField("user", "admin").Info("用户登录")

// 添加多个字段
log.WithFields(map[string]interface{}{
    "user": "admin",
    "ip":   "192.168.1.1",
}).Info("用户登录")
使用 Logrus 后端
// 初始化 Logrus 日志
if err := log.InitLogger(log.LogTypeLogrus, "/path/to/log/file.log"); err != nil {
    panic(err)
}

日志级别

  • Debug: 调试信息,用于开发环境
  • Info: 一般信息,用于记录正常操作
  • Warn: 警告信息,表示可能的问题
  • Error: 错误信息,表示操作失败
  • Fatal: 致命错误,记录后程序会退出

配置示例

设置日志级别
logger := log.GetLogger()
logger.SetLevel(log.InfoLevel) // 只记录 Info 及以上级别的日志
获取当前日志级别
level := logger.GetLevel()

最佳实践

  1. 合理使用日志级别

    • Debug: 仅在开发环境使用
    • Info: 记录重要的业务操作
    • Warn: 记录潜在问题
    • Error: 记录错误但不影响系统运行
    • Fatal: 仅在系统无法继续运行时使用
  2. 结构化日志

    • 使用 WithField/WithFields 添加上下文信息
    • 保持字段名称的一致性
    • 避免在日志中包含敏感信息
  3. 性能考虑

    • 在高性能场景下,使用 Debug 级别前先检查级别
    • 避免在热点代码路径中过度记录日志

贡献

欢迎提交 Issue 和 Pull Request 来帮助改进这个包。

许可证

本项目采用 Apache License 2.0 许可证。详见 LICENSE 文件。

Documentation

Overview

Package log 提供了全局日志功能,支持多种日志后端的统一管理。

Package log 提供了一个统一的日志接口和多种日志实现。

这个包的主要特性包括:

  • 支持多种日志后端(标准输出、Logrus)。
  • 提供统一的日志接口。
  • 支持结构化日志记录。
  • 支持多个日志级别。
  • 支持文件和标准输出。

基本使用示例:

if err := log.InitLogger(log.LogTypeStd, ""); err != nil {
    panic(err)
}
log.Info("应用启动")
log.WithField("user", "admin").Info("用户登录")

更多示例请参考 example/log 目录。

Package log 提供了基于 Logrus 的日志实现。

Package log 提供了基于标准库的日志实现。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Debug

func Debug(args ...interface{})

Debug 使用全局日志实例记录调试级别的日志。

func Debugf

func Debugf(format string, args ...interface{})

Debugf 使用全局日志实例记录格式化的调试级别日志。

func Error

func Error(args ...interface{})

Error 使用全局日志实例记录错误级别的日志。

func Errorf

func Errorf(format string, args ...interface{})

Errorf 使用全局日志实例记录格式化的错误级别日志。

func Fatal

func Fatal(args ...interface{})

Fatal 使用全局日志实例记录致命错误级别的日志。 记录日志后会导致程序退出。

func Fatalf

func Fatalf(format string, args ...interface{})

Fatalf 使用全局日志实例记录格式化的致命错误级别日志。 记录日志后会导致程序退出。

func Info

func Info(args ...interface{})

Info 使用全局日志实例记录信息级别的日志。

func Infof

func Infof(format string, args ...interface{})

Infof 使用全局日志实例记录格式化的信息级别日志。

func InitLogger

func InitLogger(logType LogType, output string) error

InitLogger 初始化全局日志实例。 参数 logType 指定要使用的日志类型,output 指定日志输出路径。 当 output 为空字符串时,日志将输出到标准输出。 返回初始化过程中可能发生的错误。

func SetLevel

func SetLevel(level Level)

SetLevel 设置全局日志级别。

func SetLogger

func SetLogger(logger Logger)

SetLogger 设置全局日志实例。

func Warn

func Warn(args ...interface{})

Warn 使用全局日志实例记录警告级别的日志。

func Warnf

func Warnf(format string, args ...interface{})

Warnf 使用全局日志实例记录格式化的警告级别日志。

Types

type Level

type Level int

Level 定义了日志的级别类型,用于控制日志的输出粒度。

const (
	// DebugLevel 表示调试级别,用于记录详细的调试信息。
	// 这个级别的日志通常只在开发环境启用。
	DebugLevel Level = iota

	// InfoLevel 表示信息级别,用于记录正常的操作信息。
	// 这个级别的日志用于跟踪应用的正常运行状态。
	InfoLevel

	// WarnLevel 表示警告级别,用于记录可能的问题或异常情况。
	// 这个级别的日志表示出现了值得注意的情况,但不影响系统的正常运行。
	WarnLevel

	// ErrorLevel 表示错误级别,用于记录错误信息。
	// 这个级别的日志表示出现了影响系统正常运行的错误。
	ErrorLevel

	// FatalLevel 表示致命错误级别,记录后会导致程序退出。
	// 这个级别的日志表示出现了无法恢复的严重错误。
	FatalLevel
)

func GetLevel

func GetLevel() Level

GetLevel 获取全局日志级别。

func ParseLevel

func ParseLevel(level string) (Level, error)

ParseLevel 从字符串解析日志级别。

func (Level) String

func (l Level) String() string

String 返回日志级别的字符串表示。

type LogType

type LogType string

LogType 定义了支持的日志类型,用于在初始化时选择具体的日志实现。

const (
	// LogTypeConsole 表示控制台日志类型。
	// 这种类型的日志会直接输出到标准输出,适合开发调试使用。
	LogTypeConsole LogType = "console"

	// LogTypeStd 表示标准库日志类型。
	// 使用 Go 标准库的 log 包实现,提供基本的日志功能。
	LogTypeStd LogType = "std"

	// LogTypeLogrus 表示 Logrus 日志类型。
	// 使用 Logrus 库实现,提供丰富的日志功能,包括结构化日志、多种输出格式等。
	LogTypeLogrus LogType = "logrus"
)

type Logger

type Logger interface {
	// SetLevel 设置日志级别。
	// 只有大于或等于设置级别的日志才会被记录。
	SetLevel(level Level)

	// GetLevel 获取当前的日志级别。
	GetLevel() Level

	// Debug 记录调试级别的日志。
	// 参数 args 支持任意类型的值,这些值会被转换为字符串并连接。
	// 调试日志应该包含有助于诊断问题的详细信息。
	Debug(args ...interface{})

	// Debugf 记录格式化的调试级别日志。
	// 参数 format 是格式化字符串,args 是对应的参数。
	// 支持标准的 Printf 风格的格式化。
	Debugf(format string, args ...interface{})

	// Info 记录信息级别的日志。
	// 参数 args 支持任意类型的值,这些值会被转换为字符串并连接。
	// 信息日志应该记录系统的正常运行状态。
	Info(args ...interface{})

	// Infof 记录格式化的信息级别日志。
	// 参数 format 是格式化字符串,args 是对应的参数。
	// 支持标准的 Printf 风格的格式化。
	Infof(format string, args ...interface{})

	// Warn 记录警告级别的日志。
	// 参数 args 支持任意类型的值,这些值会被转换为字符串并连接。
	// 警告日志应该包含可能导致问题的情况。
	Warn(args ...interface{})

	// Warnf 记录格式化的警告级别日志。
	// 参数 format 是格式化字符串,args 是对应的参数。
	// 支持标准的 Printf 风格的格式化。
	Warnf(format string, args ...interface{})

	// Error 记录错误级别的日志。
	// 参数 args 支持任意类型的值,这些值会被转换为字符串并连接。
	// 错误日志应该包含错误的详细信息和上下文。
	Error(args ...interface{})

	// Errorf 记录格式化的错误级别日志。
	// 参数 format 是格式化字符串,args 是对应的参数。
	// 支持标准的 Printf 风格的格式化。
	Errorf(format string, args ...interface{})

	// Fatal 记录致命错误级别的日志。
	// 参数 args 支持任意类型的值,这些值会被转换为字符串并连接。
	// 记录日志后会导致程序以状态码 1 退出。
	// 这个方法应该只在程序无法继续运行时使用。
	Fatal(args ...interface{})

	// Fatalf 记录格式化的致命错误级别日志。
	// 参数 format 是格式化字符串,args 是对应的参数。
	// 支持标准的 Printf 风格的格式化。
	// 记录日志后会导致程序以状态码 1 退出。
	Fatalf(format string, args ...interface{})

	// WithField 添加一个字段到日志上下文。
	// 参数 key 是字段名,value 是字段值。
	// 返回一个新的 Logger 实例,原实例不会被修改。
	// 这个方法用于添加结构化的上下文信息到日志中。
	WithField(key string, value interface{}) Logger

	// WithFields 添加多个字段到日志上下文。
	// 参数 fields 是要添加的字段映射。
	// 返回一个新的 Logger 实例,原实例不会被修改。
	// 这个方法用于一次性添加多个结构化字段。
	WithFields(fields map[string]interface{}) Logger
}

Logger 定义了统一的日志接口。 这个接口提供了基本的日志记录功能和结构化日志支持,可以通过不同的实现来支持不同的日志后端。

func GetLogger

func GetLogger() Logger

GetLogger 获取全局日志实例。 如果全局日志实例未设置,则返回一个默认的标准输出日志实例。

func NewLogrusLogger

func NewLogrusLogger(output string) (Logger, error)

NewLogrusLogger 创建一个新的 LogrusLogger 实例。 参数 output 指定日志文件的路径,如果为空则只输出到标准输出。 返回一个实现了 Logger 接口的实例和可能的错误。

func NewStdLogger

func NewStdLogger(output string) (Logger, error)

NewStdLogger 创建一个新的 StdLogger 实例。 参数 output 指定日志文件的路径,如果为空则输出到标准输出。 返回一个实现了 Logger 接口的实例和可能的错误。

func WithField

func WithField(key string, value interface{}) Logger

WithField 使用全局日志实例添加一个结构化字段。 返回一个新的 Logger 实例,包含添加的字段。

func WithFields

func WithFields(fields map[string]interface{}) Logger

WithFields 使用全局日志实例添加多个结构化字段。 返回一个新的 Logger 实例,包含添加的字段。

type LogrusLogger

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

LogrusLogger 实现了 Logger 接口,使用 Logrus 作为底层日志库。 这个实现提供了丰富的日志功能,包括: - 结构化日志记录。 - 多种输出格式(文本、JSON)。 - 灵活的日志级别控制。 - 支持同时输出到多个目标。

func (*LogrusLogger) Debug

func (l *LogrusLogger) Debug(args ...interface{})

Debug 实现 Logger 接口的调试级别日志记录。

func (*LogrusLogger) Debugf

func (l *LogrusLogger) Debugf(format string, args ...interface{})

Debugf 实现 Logger 接口的格式化调试级别日志记录。

func (*LogrusLogger) Error

func (l *LogrusLogger) Error(args ...interface{})

Error 实现 Logger 接口的错误级别日志记录。

func (*LogrusLogger) Errorf

func (l *LogrusLogger) Errorf(format string, args ...interface{})

Errorf 实现 Logger 接口的格式化错误级别日志记录。

func (*LogrusLogger) Fatal

func (l *LogrusLogger) Fatal(args ...interface{})

Fatal 实现 Logger 接口的致命错误级别日志记录。 记录日志后会导致程序以状态码 1 退出。

func (*LogrusLogger) Fatalf

func (l *LogrusLogger) Fatalf(format string, args ...interface{})

Fatalf 实现 Logger 接口的格式化致命错误级别日志记录。 记录日志后会导致程序以状态码 1 退出。

func (*LogrusLogger) GetLevel

func (l *LogrusLogger) GetLevel() Level

GetLevel 实现 Logger 接口的日志级别获取方法。

func (*LogrusLogger) Info

func (l *LogrusLogger) Info(args ...interface{})

Info 实现 Logger 接口的信息级别日志记录。

func (*LogrusLogger) Infof

func (l *LogrusLogger) Infof(format string, args ...interface{})

Infof 实现 Logger 接口的格式化信息级别日志记录。

func (*LogrusLogger) SetLevel

func (l *LogrusLogger) SetLevel(level Level)

SetLevel 实现 Logger 接口的日志级别设置方法。

func (*LogrusLogger) Warn

func (l *LogrusLogger) Warn(args ...interface{})

Warn 实现 Logger 接口的警告级别日志记录。

func (*LogrusLogger) Warnf

func (l *LogrusLogger) Warnf(format string, args ...interface{})

Warnf 实现 Logger 接口的格式化警告级别日志记录。

func (*LogrusLogger) WithField

func (l *LogrusLogger) WithField(key string, value interface{}) Logger

WithField 实现 Logger 接口的单字段添加方法。 返回一个包含新字段的新 Logger 实例。

func (*LogrusLogger) WithFields

func (l *LogrusLogger) WithFields(fields map[string]interface{}) Logger

WithFields 实现 Logger 接口的多字段添加方法。 返回一个包含新字段的新 Logger 实例。

type StdLogger

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

StdLogger 实现了 Logger 接口,使用 Go 标准库的 log 包作为底层实现。 这个实现提供了基本的日志功能: - 支持不同的日志级别。 - 支持结构化字段。 - 支持文件输出。 - 支持格式化日志。

func (*StdLogger) Debug

func (l *StdLogger) Debug(args ...interface{})

Debug 实现 Logger 接口的调试级别日志记录。

func (*StdLogger) Debugf

func (l *StdLogger) Debugf(format string, args ...interface{})

Debugf 实现 Logger 接口的格式化调试级别日志记录。

func (*StdLogger) Error

func (l *StdLogger) Error(args ...interface{})

Error 实现 Logger 接口的错误级别日志记录。

func (*StdLogger) Errorf

func (l *StdLogger) Errorf(format string, args ...interface{})

Errorf 实现 Logger 接口的格式化错误级别日志记录。

func (*StdLogger) Fatal

func (l *StdLogger) Fatal(args ...interface{})

Fatal 实现 Logger 接口的致命错误级别日志记录。 记录日志后会导致程序以状态码 1 退出。

func (*StdLogger) Fatalf

func (l *StdLogger) Fatalf(format string, args ...interface{})

Fatalf 实现 Logger 接口的格式化致命错误级别日志记录。 记录日志后会导致程序以状态码 1 退出。

func (*StdLogger) GetLevel

func (l *StdLogger) GetLevel() Level

GetLevel 实现 Logger 接口的日志级别获取方法。

func (*StdLogger) Info

func (l *StdLogger) Info(args ...interface{})

Info 实现 Logger 接口的信息级别日志记录。

func (*StdLogger) Infof

func (l *StdLogger) Infof(format string, args ...interface{})

Infof 实现 Logger 接口的格式化信息级别日志记录。

func (*StdLogger) SetLevel

func (l *StdLogger) SetLevel(level Level)

SetLevel 实现 Logger 接口的日志级别设置方法。

func (*StdLogger) Warn

func (l *StdLogger) Warn(args ...interface{})

Warn 实现 Logger 接口的警告级别日志记录。

func (*StdLogger) Warnf

func (l *StdLogger) Warnf(format string, args ...interface{})

Warnf 实现 Logger 接口的格式化警告级别日志记录。

func (*StdLogger) WithField

func (l *StdLogger) WithField(key string, value interface{}) Logger

WithField 实现 Logger 接口的单字段添加方法。 创建一个新的日志实例,包含当前实例的所有字段和新添加的字段。 返回包含所有字段的新 Logger 实例。

func (*StdLogger) WithFields

func (l *StdLogger) WithFields(fields map[string]interface{}) Logger

WithFields 实现 Logger 接口的多字段添加方法。 创建一个新的日志实例,包含当前实例的所有字段和新添加的字段。 返回包含所有字段的新 Logger 实例。

Jump to

Keyboard shortcuts

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