log

package module
v0.0.1 Latest Latest
Warning

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

Go to latest
Published: Jan 6, 2025 License: MIT Imports: 14 Imported by: 157

README

log

GoDoc

go-dep2p 使用的日志库

log 封装了 zap 以提供日志门面。log 管理日志实例并允许单独控制它们的级别。

安装

go get github.com/dep2p/log

使用方法

导入包并以 logging 命名后,可以像这样创建 EventLogger 实例:

var log = logging.Logger("子系统名称")

然后可以使用它来输出 printf 风格的日志消息,支持七个标准级别。

可以为所有日志记录器设置级别:

lvl, err := logging.LevelFromString("error")
if err != nil {
	panic(err)
}
logging.SetAllLoggers(lvl)

也可以单独设置:

err := logging.SetLogLevel("net:pubsub", "info")
if err != nil {
	panic(err)
}

或通过正则表达式设置:

err := logging.SetLogLevelRegex("net:.*", "info")
if err != nil {
	panic(err)
}
环境变量

本包可以通过多个环境变量进行配置。

GOLOG_LOG_LEVEL

指定日志级别,可以全局设置也可以针对每个子系统设置。

例如,以下设置会将全局最低日志级别设为 error,但将 subsystem1 的最低日志级别降至 info,将 subsystem2 的最低日志级别降至 debug

export GOLOG_LOG_LEVEL="error,subsystem1=info,subsystem2=debug"

DeP2P_LOGGING 是此环境变量的已弃用别名。

GOLOG_FILE

指定日志应写入的文件。如果未指定此选项,日志将写入标准错误输出。

export GOLOG_FILE="/path/to/my/file.log"
GOLOG_OUTPUT

指定日志输出的位置。可以使用以下一个或多个值,用 + 组合:

  • stdout -- 写入标准输出
  • stderr -- 写入标准错误
  • file -- 写入 GOLOG_FILE 指定的文件

例如,如果要同时输出到文件和标准错误:

export GOLOG_FILE="/path/to/my/file.log"
export GOLOG_OUTPUT="stderr+file"

仅设置 GOLOG_FILE 将阻止日志写入标准错误。

GOLOG_LOG_FMT

指定日志消息格式。支持以下值:

  • color -- 人类可读的彩色(ANSI)输出
  • nocolor -- 人类可读的纯文本输出
  • json -- 结构化 JSON

例如,要输出结构化 JSON(便于解析):

export GOLOG_LOG_FMT="json"

当输出到终端时,日志格式默认为 color,否则默认为 nocolor

DeP2P_LOGGING_FMT 是此环境变量的已弃用别名。

GOLOG_LOG_LABELS

指定应添加到所有日志消息中的标签集,以逗号分隔的键值对形式。例如,以下设置会为每个日志条目添加 {"app": "example_app", "dc": "sjc-1"}

export GOLOG_LOG_LABELS="app=example_app,dc=sjc-1"

许可证

MIT

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// LevelDebug 表示调试级别日志
	LevelDebug = LogLevel(zapcore.DebugLevel)
	// LevelInfo 表示信息级别日志
	LevelInfo = LogLevel(zapcore.InfoLevel)
	// LevelWarn 表示警告级别日志
	LevelWarn = LogLevel(zapcore.WarnLevel)
	// LevelError 表示错误级别日志
	LevelError = LogLevel(zapcore.ErrorLevel)
	// LevelDPanic 表示开发环境恐慌级别日志
	LevelDPanic = LogLevel(zapcore.DPanicLevel)
	// LevelPanic 表示恐慌级别日志
	LevelPanic = LogLevel(zapcore.PanicLevel)
	// LevelFatal 表示致命错误级别日志
	LevelFatal = LogLevel(zapcore.FatalLevel)
)

定义所有支持的日志级别常量

View Source
var ErrNoSuchLogger = errors.New("错误: 找不到该日志记录器")

ErrNoSuchLogger 当请求不存在的logger时返回此错误

Functions

func FormatRFC3339

func FormatRFC3339(t time.Time) string

FormatRFC3339 将给定时间转换为UTC时区的RFC3339Nano格式 Params:

  • t: 需要格式化的时间

Returns:

  • string: 格式化后的时间字符串

func GetSubsystems

func GetSubsystems() []string

GetSubsystems 返回所有已注册的logger名称列表 返回值:

  • []string: 包含所有logger名称的字符串切片

func SetAllLoggers

func SetAllLoggers(lvl LogLevel)

SetAllLoggers 将所有logger的日志级别更改为指定级别 参数:

  • lvl: 要设置的日志级别

func SetDebugLogging

func SetDebugLogging()

SetDebugLogging 将所有日志级别设置为DEBUG

func SetLogLevel

func SetLogLevel(name, level string) error

SetLogLevel 更改特定子系统的日志级别 参数:

  • name: 子系统名称,"*"表示所有子系统
  • level: 要设置的日志级别字符串

返回值:

  • error: 设置过程中的错误,如果成功则为nil

func SetLogLevelRegex

func SetLogLevelRegex(e, l string) error

SetLogLevelRegex 将所有匹配表达式`e`的logger设置为级别`l` 参数:

  • e: 正则表达式字符串,用于匹配logger名称
  • l: 要设置的日志级别字符串

返回值:

  • error: 设置过程中的错误,如果成功则为nil

func SetPrimaryCore

func SetPrimaryCore(core zapcore.Core)

SetPrimaryCore 更改主日志core 参数:

  • core: 要设置的新日志core

如果已调用SetupLogging,则会替换之前配置的core

func SetupLogging

func SetupLogging(cfg Config)

SetupLogging 初始化logger后端并设置标志 参数:

  • cfg: Config 日志配置对象

Types

type Config

type Config struct {
	Format LogFormat // 日志输出格式,默认为ColorizedOutput

	Level LogLevel // 默认最小启用的日志级别

	SubsystemLevels map[string]LogLevel // 每个子系统的默认级别,未指定时默认为Level

	Stderr bool // 是否将日志写入stderr

	Stdout bool // 是否将日志写入stdout

	File string // 日志文件路径

	URL string // zap支持的URL schema,使用zap.RegisterSink注册

	Labels map[string]string // 应用于所有logger的键值对标签
}

Config 日志配置结构体

func GetConfig

func GetConfig() Config

GetConfig 返回已保存配置的副本 可以检查、修改配置,并通过后续调用SetupLogging()重新应用 返回值:

  • Config: 当前日志配置的副本

type EventLogger

type EventLogger interface {
	StandardLogger
}

EventLogger 扩展了StandardLogger接口,允许日志项包含结构化元数据

type LogFormat

type LogFormat int

LogFormat 日志格式类型

const (
	ColorizedOutput LogFormat = iota // 彩色输出格式
	PlaintextOutput                  // 纯文本输出格式
	JSONOutput                       // JSON输出格式
)

type LogLevel

type LogLevel zapcore.Level

LogLevel 表示日志严重性级别 使用包变量作为枚举值

func LevelFromString

func LevelFromString(level string) (LogLevel, error)

LevelFromString 将字符串形式的日志级别解析为 LogLevel 类型 参数:

  • level: 要解析的日志级别字符串,支持的值包括: DEBUG, INFO, WARN, ERROR, DPANIC, PANIC, FATAL 以及它们的小写形式

返回:

  • LogLevel: 解析后的日志级别
  • error: 解析过程中的错误,如果返回错误则应丢弃返回的 LogLevel

type PipeReader

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

PipeReader 是一个从日志记录器读取数据的读取器。它是同步的, 因此在读取时阻塞会影响日志记录性能。

func NewPipeReader

func NewPipeReader(opts ...PipeReaderOption) *PipeReader

NewPipeReader 创建一个新的内存读取器,用于从所有日志记录器中读取数据 调用者必须在使用完成后调用返回的读取器的 Close 方法 参数:

  • opts: 可选的配置选项列表

返回值:

  • *PipeReader: 新创建的管道读取器

默认情况下:

  1. 以 JSON 格式记录日志。可以通过传递 PipeFormat 选项更改。
  2. 记录所有原本会记录到"主要"日志输出的内容。即由 SetLogLevel 启用的所有内容。 可以通过传递 PipeLevel 选项来提高最小日志级别。

func (*PipeReader) Close

func (p *PipeReader) Close() error

Close 从日志记录器中注销读取器 返回值:

  • error: 关闭过程中的错误,如果没有错误则为 nil

func (*PipeReader) Read

func (p *PipeReader) Read(data []byte) (int, error)

Read 实现标准的 Read 接口 参数:

  • data: 用于存储读取数据的字节切片

返回值:

  • int: 读取的字节数
  • error: 读取过程中的错误,如果没有错误则为 nil

type PipeReaderOption

type PipeReaderOption interface {
	// contains filtered or unexported methods
}

PipeReaderOption 定义配置选项的接口

func PipeFormat

func PipeFormat(format LogFormat) PipeReaderOption

PipeFormat 设置管道读取器的输出格式 参数:

  • format: 要设置的日志格式

返回值:

  • PipeReaderOption: 用于配置管道读取器的选项

func PipeLevel

func PipeLevel(level LogLevel) PipeReaderOption

PipeLevel 设置发送到管道读取器的日志级别 参数:

  • level: 要设置的日志级别

返回值:

  • PipeReaderOption: 用于配置管道读取器的选项

type StandardLogger

type StandardLogger interface {
	// Debug 记录调试级别的日志
	Debug(args ...interface{})
	// Debugf 使用格式化字符串记录调试级别的日志
	Debugf(format string, args ...interface{})
	// Error 记录错误级别的日志
	Error(args ...interface{})
	// Errorf 使用格式化字符串记录错误级别的日志
	Errorf(format string, args ...interface{})
	// Fatal 记录致命错误级别的日志,并终止程序
	Fatal(args ...interface{})
	// Fatalf 使用格式化字符串记录致命错误级别的日志,并终止程序
	Fatalf(format string, args ...interface{})
	// Info 记录信息级别的日志
	Info(args ...interface{})
	// Infof 使用格式化字符串记录信息级别的日志
	Infof(format string, args ...interface{})
	// Panic 记录panic级别的日志,并触发panic
	Panic(args ...interface{})
	// Panicf 使用格式化字符串记录panic级别的日志,并触发panic
	Panicf(format string, args ...interface{})
	// Warn 记录警告级别的日志
	Warn(args ...interface{})
	// Warnf 使用格式化字符串记录警告级别的日志
	Warnf(format string, args ...interface{})
}

StandardLogger 定义了一个标准日志接口,提供与标准printf日志记录器的API兼容性 例如: go-logging

type ZapEventLogger

type ZapEventLogger struct {
	zap.SugaredLogger
	// contains filtered or unexported fields
}

ZapEventLogger 实现了EventLogger接口,封装了zap的SugaredLogger

func Logger

func Logger(system string) *ZapEventLogger

Logger 根据系统名称获取事件日志记录器 Params:

  • system: 系统名称,用于标识日志来源

Returns:

  • *ZapEventLogger: 返回一个基于Zap的事件日志记录器

func WithSkip

func WithSkip(l *ZapEventLogger, skip int) *ZapEventLogger

WithSkip 返回一个新的日志记录器,在报告行号/文件时跳过指定数量的调用栈帧 Params:

  • l: 原始日志记录器
  • skip: 需要跳过的调用栈帧数量

Returns:

  • *ZapEventLogger: 返回新的日志记录器

func WithStacktrace

func WithStacktrace(l *ZapEventLogger, level LogLevel) *ZapEventLogger

WithStacktrace 为指定日志级别添加堆栈跟踪功能 Params:

  • l: 原始日志记录器
  • level: 需要添加堆栈跟踪的日志级别

Returns:

  • *ZapEventLogger: 返回新的带有堆栈跟踪功能的日志记录器

func (*ZapEventLogger) Warning

func (logger *ZapEventLogger) Warning(args ...interface{})

Warning 提供向后兼容性支持 Deprecated: 请使用Warn(args ...interface{})替代

func (*ZapEventLogger) Warningf

func (logger *ZapEventLogger) Warningf(format string, args ...interface{})

Warningf 提供向后兼容性支持 Deprecated: 请使用Warnf(format string, args ...interface{})替代

Jump to

Keyboard shortcuts

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