logs

package module
v4.5.1 Latest Latest
Warning

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

Go to latest
Published: Apr 13, 2023 License: MIT Imports: 12 Imported by: 1

README

logs Go PkgGoDev Go version codecov

全新的 v4 版本,对所有功能进行了重构,与之前的几个版本完全不同。 新版本不再追求与标准库的绝对兼容,仅提供了 StdLogger 用于转换成标准库对象的方法。

import "github.com/issue9/logs/v4"

l := logs.New(nil)
l.Debug("debug start...")
l.Debugf("%v start...", "debug")
l.DEBUG().Print("debug start...")

err := l.With(logs.LevelError, map[string]interface{}{"k1":"v1"})
err.Printf("带默认参数 k1=v1") // 不用 With 指定 k1,err 全都自动带上此参数

安装

go get github.com/issue9/logs/v4

版权

本项目采用 MIT 开源授权许可证,完整的授权说明可在 LICENSE 文件中找到。

Documentation

Overview

Package logs 日志系统

格式

提供了 Writer 接口用于处理输出的日志格式,用户可以自己实现, 系统也提供了几种常用的供用户选择。

同时还提供了 Printer 接口用于处理 [Logger.Print] 等方法输入的数据。 Printer 一般用于对用户输入的数据进行二次处理,比如进行本地化翻译等。

Logger

Logger 为实际的日志输出接口,提供多种 Logger 接口的实现。

  • Logs.ERROR 等为普通的日志对象;
  • Logs.With 返回的是带固定参数的日志对象;

Index

Constants

View Source
const (
	MilliLayout = "15:04:05.000"
	MicroLayout = "15:04:05.000000"
	NanoLayout  = "15:04:05.000000000"
)

Variables

This section is empty.

Functions

func Caller

func Caller(l *Logs)

Caller 是否显示记录的定位信息

func Created

func Created(l *Logs)

Created 是否显示记录的创建时间

func DefaultPrint added in v4.2.0

func DefaultPrint(l *Logs)

func IsValidLevel added in v4.5.1

func IsValidLevel(l Level) bool

Types

type Entry

type Entry struct {
	Level   Level
	Created time.Time // 日志的生成时间

	// 日志的实际内容
	//
	// 如果要改变此值,请使用 Depth* 系列的方法。
	Message string

	// 以下表示日志的定位信息
	Path string
	Line int

	// 额外的数据保存在此,比如由 [Logger.With] 添加的数据。
	Params []Pair
	// contains filtered or unexported fields
}

Entry 每一条日志的表示对象

func (*Entry) DepthError added in v4.3.0

func (e *Entry) DepthError(depth int, err error)

DepthError 输出 error 类型的内容到日志

depth 表示调用,1 表示调用此方法的位置;

如果 Logs.HasCaller 为 false,那么 depth 将不起实际作用。

func (*Entry) DepthPrint added in v4.3.0

func (e *Entry) DepthPrint(depth int, v ...interface{})

DepthPrint 输出任意类型的内容到日志

depth 表示调用,1 表示调用此方法的位置;

如果 Logs.HasCaller 为 false,那么 depth 将不起实际作用。

func (*Entry) DepthPrintf added in v4.3.0

func (e *Entry) DepthPrintf(depth int, format string, v ...interface{})

DepthPrintf 输出任意类型的内容到日志

depth 表示调用,1 表示调用此方法的位置;

如果 Logs.HasCaller 为 false,那么 depth 将不起实际作用。

func (*Entry) DepthPrintln added in v4.4.0

func (e *Entry) DepthPrintln(depth int, v ...interface{})

DepthPrintln 输出任意类型的内容到日志

depth 表示调用,1 表示调用此方法的位置;

如果 Logs.HasCaller 为 false,那么 depth 将不起实际作用。

func (*Entry) DepthString added in v4.3.0

func (e *Entry) DepthString(depth int, s string)

DepthString 输出字符串类型的内容到日志

depth 表示调用,1 表示调用此方法的位置;

如果 Logs.HasCaller 为 false,那么 depth 将不起实际作用。

func (*Entry) Error

func (e *Entry) Error(err error)

func (*Entry) Location deprecated

func (e *Entry) Location(depth int) *Entry

Location 记录位置信息

会同时写入 e.Path 和 e.Line 两个值。

depth 表示调用,1 表示调用 Location 的位置;

如果 Logs.HasCaller 为 false,那么此调用将不产生任何内容。

Deprecated: 可以直接使用 Entry.DepthError 等方法代替

func (*Entry) Logs

func (e *Entry) Logs() *Logs

func (*Entry) Print

func (e *Entry) Print(v ...interface{})

func (*Entry) Printf

func (e *Entry) Printf(format string, v ...interface{})

func (*Entry) Println added in v4.4.0

func (e *Entry) Println(v ...interface{})

func (*Entry) String added in v4.2.0

func (e *Entry) String(s string)

func (*Entry) With

func (e *Entry) With(name string, val interface{}) Input

type Input added in v4.3.0

type Input interface {
	// With 为日志提供额外的参数
	//
	// 返回值是当前对象。
	With(name string, val interface{}) Input

	// Error 将一条错误信息作为一条日志输出
	//
	// 这是 Print 的特化版本,在已知类型为 error 时,
	// 采用此方法会比 Print(err) 有更好的性能。
	Error(err error)

	// String 将字符串作为一条日志输出
	//
	// 这是 Print 的特化版本,在已知类型为字符串时,
	// 采用此方法会比 Print(s) 有更好的性能。
	String(s string)

	// 输出一条日志信息
	Print(v ...interface{})
	Println(v ...interface{})
	Printf(format string, v ...interface{})
}

Input 日志输入提供的接口

type Level

type Level int8
const (
	LevelInfo Level
	LevelTrace
	LevelDebug
	LevelWarn
	LevelError
	LevelFatal
)

目前支持的日志类型

func ParseLevel

func ParseLevel(s string) (Level, error)

func (Level) MarshalText

func (l Level) MarshalText() ([]byte, error)

func (Level) String

func (l Level) String() string

func (*Level) UnmarshalText

func (l *Level) UnmarshalText(data []byte) error

type Logger

type Logger interface {
	Input

	// StdLogger 将当前对象转换成标准库的日志对象
	//
	// NOTE: 不要设置返回对象的 Prefix 和 Flag,这些配置项与当前模块的功能有重叠。
	// [log.Logger] 应该仅作为向 [Logger] 输入 [Entry.Message] 内容使用。
	StdLogger() *log.Logger
}

Logger 日志接口

type Logs

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

func New

func New(w Writer, o ...Option) *Logs

New 声明 Logs 对象

w 如果为 nil,则表示采用 NewNopWriter

func (*Logs) DEBUG

func (logs *Logs) DEBUG() Logger

func (*Logs) Debug

func (logs *Logs) Debug(v ...interface{})

func (*Logs) Debugf

func (logs *Logs) Debugf(format string, v ...interface{})

func (*Logs) ERROR

func (logs *Logs) ERROR() Logger

func (*Logs) Enable

func (logs *Logs) Enable(level ...Level)

Enable 允许的日志通道

调用此函数之后,所有不在 level 参数的通道都将被关闭。

func (*Logs) Error

func (logs *Logs) Error(v ...interface{})

func (*Logs) Errorf

func (logs *Logs) Errorf(format string, v ...interface{})

func (*Logs) FATAL

func (logs *Logs) FATAL() Logger

func (*Logs) Fatal

func (logs *Logs) Fatal(v ...interface{})

func (*Logs) Fatalf

func (logs *Logs) Fatalf(format string, v ...interface{})

func (*Logs) HasCaller

func (logs *Logs) HasCaller() bool

HasCaller 是否包含定位信息

func (*Logs) HasCreated

func (logs *Logs) HasCreated() bool

HasCreated 是否包含时间信息

func (*Logs) INFO

func (logs *Logs) INFO() Logger

func (*Logs) Info

func (logs *Logs) Info(v ...interface{})

func (*Logs) Infof

func (logs *Logs) Infof(format string, v ...interface{})

func (*Logs) IsEnable

func (logs *Logs) IsEnable(l Level) bool

func (*Logs) Logger

func (logs *Logs) Logger(lv Level) Logger

Logger 返回指定级别的日志接口

func (*Logs) NewEntry

func (logs *Logs) NewEntry(lv Level) *Entry

func (*Logs) Output deprecated

func (logs *Logs) Output(e *Entry)

Output 输出 Entry 对象

相对于其它方法,该方法比较自由,可以由 e 决定最终输出到哪儿,内容也由用户定义。

Deprecated: Entry.DepthError 等方法自带了 Output 方法

func (*Logs) SetCaller added in v4.3.0

func (logs *Logs) SetCaller(v bool)

SetCaller 是否显示位置信息

func (*Logs) SetCreated added in v4.3.0

func (logs *Logs) SetCreated(v bool)

SetCreated 是否显示时间信息

func (*Logs) SetOutput

func (logs *Logs) SetOutput(w Writer)

func (*Logs) SetPrinter added in v4.3.0

func (logs *Logs) SetPrinter(p Printer)

SetPrinter 设置 Printer 对象

如果 p 为 nil,表示采用默认值。

func (*Logs) StdLogger deprecated

func (logs *Logs) StdLogger(l Level) *log.Logger

StdLogger 转换成标准库的 Logger

NOTE: 不要设置返回对象的 Prefix 和 Flag,这些配置项与 Logs 的功能有重叠。 log.Logger 应该仅作为向 Logger 输入 [Entry.Message] 内容使用。

Deprecated: 请使用 [Logger.StdLogger] 代替

func (*Logs) TRACE

func (logs *Logs) TRACE() Logger

func (*Logs) Trace

func (logs *Logs) Trace(v ...interface{})

func (*Logs) Tracef

func (logs *Logs) Tracef(format string, v ...interface{})

func (*Logs) WARN

func (logs *Logs) WARN() Logger

func (*Logs) Warn

func (logs *Logs) Warn(v ...interface{})

func (*Logs) Warnf

func (logs *Logs) Warnf(format string, v ...interface{})

func (*Logs) With added in v4.3.0

func (logs *Logs) With(lv Level, params map[string]interface{}) Logger

With 创建带有指定参数的日志对象

params 自动添加的参数,每条日志都将自动带上这些参数;

type Option

type Option func(*Logs)

func Print added in v4.2.0

func Print(f Printer) Option

Print 自定义 Printer 接口

type Pair

type Pair struct {
	K string
	V interface{}
}

type Printer added in v4.2.0

type Printer interface {
	// Error 对 [Input.Error] 提供的内容进行二次处理
	Error(error) string

	// String 对 [Input.String] 提供的内容进行二次处理
	String(string) string

	// Printf 对 [Input.Printf] 提供的内容进行二次处理
	Printf(string, ...interface{}) string

	// Print 对 [Input.Print] 提供的内容进行二次处理
	Print(...interface{}) string

	// Println 对 [Input.Println] 提供的内容进行二次处理
	Println(...interface{}) string
}

Printer 对 Input 输入的内容进行二次处理

每个函数分别对 Input 相应的输入方法,对其提供的内容进行格式化。

type WriteEntry added in v4.5.0

type WriteEntry func(*Entry)

func (WriteEntry) WriteEntry added in v4.5.0

func (w WriteEntry) WriteEntry(e *Entry)

type Writer

type Writer interface {
	// WriteEntry 将 [Entry] 写入日志通道
	//
	// NOTE: 此方法应该保证以换行符结尾。
	WriteEntry(*Entry)
}

Writer 将 Entry 转换成文本并输出的功能

func MergeWriter

func MergeWriter(w ...Writer) Writer

MergeWriter 将多个 Writer 合并成一个 Writer 接口对象

func NewDispatchWriter

func NewDispatchWriter(d map[Level]Writer) Writer

NewDispatchWriter 根据 Level 派发到不同的 Writer 对象

func NewJSONWriter

func NewJSONWriter(timeLayout string, w ...io.Writer) Writer

NewJSONWriter 声明 JSON 格式的输出

func NewNopWriter

func NewNopWriter() Writer

NewNopWriter 空的 Writer 接口实现

func NewTermWriter

func NewTermWriter(timeLayout string, fore colors.Color, w io.Writer) Writer

NewTermWriter 带颜色的终端输出通道

timeLayout 表示输出的时间格式,遵守 time.Format 的参数要求, 如果为空,则不输出时间信息; fore 表示终端信息的字符颜色,背景始终是默认色; w 表示终端的接口,可以是 os.Stderr 或是 os.Stdout, 如果是其它的实现者则会带控制字符一起输出;

func NewTextWriter

func NewTextWriter(timeLayout string, w ...io.Writer) Writer

Directories

Path Synopsis
Package writers 提供了一组实现 io.Writer 接口的结构
Package writers 提供了一组实现 io.Writer 接口的结构
rotate
Package rotate 提供一个可以按文件大小进行分割的 io.Writer 实例
Package rotate 提供一个可以按文件大小进行分割的 io.Writer 实例

Jump to

Keyboard shortcuts

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