logs

package module
v2.5.4 Latest Latest
Warning

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

Go to latest
Published: Jan 15, 2021 License: MIT Imports: 10 Imported by: 0

README

logs Go PkgGoDev

一个可配置的日志服务包。可以通过 XML 自定义日志输出:

<?xml version="1.0" encoding="utf-8" ?>
<logs>
    <debug>
        <buffer size="10">
            <rotate dir="/var/log/" size="5M" />
            <stmp username=".." password=".." />
        </buffer>
    </debug>
    <info>
        ....
    </info>
</logs>
logs.InitFromXMLFile("./config.xml") // 用 XML 初始化 logs
logs.Debug("debug start...")
logs.Debugf("%v start...", "debug")
logs.DEBUG().Println("debug start...")

安装

go get github.com/issue9/logs/v2

版权

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

Documentation

Overview

Package logs 是基于 XML 配置的日志系统。

logs 定义了 6 个级别的日志:ERROR、INFO、TRACE、DEBUG、CRITICAL 和 WARN。 用户可以根据自己的需求,通过 XML 配置文件自定义每个日志输出行为。 以下为一个简短的 XML 配置示例,具体的可参考目录下的 config.xml。

<?xml version="1.0" encoding="utf-8" ?>
<logs>
    <debug>
        <buffer size="10">
            <rotate dir="/var/log/" size="5M" />
            <stmp username=".." password=".." />
        </buffer>
    </debug>
    <info>
        <console output="stderr" color="yellow" />
    </info>
    <!-- 除了 debug 和 info,其它 4 个依然输出到 ioutil.Discard -->
</logs>

然后就可以调用 Go 代码输出日志内容:

logs.Debug(...)
logs.Debugf("format", v...)
logs.DEBUG.Println(...)

// error 并未作任何配置,所以内容将不作实际输出
logs.ERROR().Print(...)

// 向所有级别的日志输出内容。
logs.All(...)

上面的配置文件表示 DEBUG 级别的内容输出前都进被缓存,当量达到 10 条时, 一次性向 rotate 和 stmp 输出。 其中 buffer、rotate、stmp、debug 和 info 都是实现了 io.Writer 接口的结 构。通过 Register() 注册成功之后,即可以使用。

配置文件:

- 只支持 utf-8 编码的 XML 文件。

- 节点名称和节点属性区分大小写,但是属性值不区分大小写。

- 顶级元素必须为 logs,且不需要带任何属性;

- 二级元素实际上就是一个 log.Logger 实例, 只能为 info、deubg、trace、warn、error 和 critical, 分别对应 INFO、DEBUG、TRACE、WARN、ERROR 和 CRITICAL 等日志通道。 可以带上 prefix 和 flag 属性,分别对应 log.New() 中的相应参数。

- 三级及以下元素可以自己根据需求组合,logs 自带以下 writer, 用户也可以自己向 logs 注册自己的实现。

1. buffer:

缓存工具,当数量达到指定值时,一起向所有的子元素输出。 比如上面的示例中,所有向 debug 输出的内容,都会被 buffer 缓存, 直到数量达到 10 条,才会一起向 rotate 和 stmp 输出内容。 仅有 size 一个参数:

size: 用于指定缓存的数量,必填参数。

2. rotate:

这是一个按文件大写自动分割日志的实例,以第一条记录的产生时间作为文件名。 拥有以下三个参数:

filename:表示日志文件的格式;
dir:	 表示的是日志存放的目录;
size:    表示的是每个日志的大概大小,默认单位为 byte,可以带字符单位,
          如 5M、10G 等(支持 k、m 和 g 三个后缀,不区分大小写)。

3. stmp:

将日志内容发送给指定邮件,可定义的属性为:

username: 发送邮件的账号;
password: 账号对应的密码;
host:	  stmp的主机;
subject:  邮件的主题;
sendTo:   接收人地址,多个收件地址使用分号分隔。

4. console:

向控制台输出内容。可定义的属性为:

output:    只能为 "stderr", "stdout" 两个值,表示输出的具体方向,默认值为 "stderr";
foreground: 表示输出时的前景色,其值在 github.com/issue9/term/colors 中定义。
background: 表示输出时的背景色,其值在 github.com/issue9/term/colors 中定义。

自定义

除了以上定义的元素,用户也可以自行实现 io.Writer 接口,以实现自定义的输出方向。 要添加新的元素,只需要向 Register() 函数注册一个元素的初始化函数即可, 其中注册的名称将作为配置节点的元素名称,需要唯一,不能与现有的名称相同; 函数则作为节点转换成实例时的转换功能,需要负责解析节点传递过来的属性列表(args 参数), 若是一个容器节点(如 buffer,可以包含子节点)则返回的实例必须要实现 WriteFlushAdder 接口, 该函数的原型为:

WriterInitializer

NOTE: 不能对 logs.Error() 等函数进行再次封闭,若非要这样做的话, 建议使用 logs.ERROR().Output(),否则会造成输出的错误信息定位不准确的问题。

Index

Constants

View Source
const (
	LevelInfo = iota
	LevelTrace
	LevelDebug
	LevelWarn
	LevelError
	LevelCritical
)

目前支持的日志类型

Variables

This section is empty.

Functions

func All

func All(v ...interface{})

All 向所有的日志输出内容

func Allf

func Allf(format string, v ...interface{})

Allf 向所有的日志输出内容

func CRITICAL

func CRITICAL() *log.Logger

CRITICAL 获取 CRITICAL 级别的 log.Logger 实例,在未指定 critical 级别的日志时,该实例返回一个 nil。

func Critical

func Critical(v ...interface{})

Critical 相当于 CRITICAL().Println(v...)的简写方式

func Criticalf

func Criticalf(format string, v ...interface{})

Criticalf 相当于 CRITICAL().Printf(format, v...) 的简写方式

func DEBUG

func DEBUG() *log.Logger

DEBUG 获取 DEBUG 级别的 log.Logger 实例,在未指定 debug 级别的日志时,该实例返回一个 nil。

func Debug

func Debug(v ...interface{})

Debug 相当于 DEBUG().Println(v...) 的简写方式

func Debugf

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

Debugf 相当于 DEBUG().Printf(format, v...) 的简写方式

func ERROR

func ERROR() *log.Logger

ERROR 获取 ERROR 级别的 log.Logger 实例,在未指定 error 级别的日志时,该实例返回一个 nil。

func Error

func Error(v ...interface{})

Error 相当于 ERROR().Println(v...) 的简写方式

func Errorf

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

Errorf 相当于 ERROR().Printf(format, v...) 的简写方式

func Fatal

func Fatal(code int, v ...interface{})

Fatal 输出错误信息然后退出程序

func Fatalf

func Fatalf(code int, format string, v ...interface{})

Fatalf 输出错误信息然后退出程序

func Flush

func Flush()

Flush 输出所有的缓存内容

若是通过 os.Exit() 退出程序的,在执行之前, 一定记得调用 Flush() 输出可能缓存的日志内容。

func INFO

func INFO() *log.Logger

INFO 获取 INFO 级别的 log.Logger 实例

在未指定 info 级别的日志时,该实例返回一个 nil。

func Info

func Info(v ...interface{})

Info 相当于 INFO().Println(v...) 的简写方式

Info 函数默认是带换行符的,若需要不带换行符的,请使用 DEBUG().Print() 函数代替。 其它相似函数也有类型功能。

func Infof

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

Infof 相当于 INFO().Printf(format, v...) 的简写方式

func Init

func Init(cfg *config.Config) error

Init 从 config.Config 中初始化整个 logs 系统

func IsRegisted

func IsRegisted(name string) bool

IsRegisted 查询指定名称的 Writer 是否已经被注册

func Panic

func Panic(v ...interface{})

Panic 输出错误信息然后触发 panic

func Panicf

func Panicf(format string, v ...interface{})

Panicf 输出错误信息然后触发 panic

func Registed

func Registed() []string

Registed 返回所有已注册的 writer 名称

func Register

func Register(name string, init WriterInitializer) bool

Register 注册一个 WriterInitializer。

writer 初始化函数原型可参考: WriterInitializer。 返回值反映是否注册成功。若已经存在相同名称的,则返回 false

func SetOutput

func SetOutput(level int, w io.Writer, prefix string, flag int) error

SetOutput 设置某一个类型的输出通道

若将 w 设置为 nil 等同于 ioutil.Discard,即关闭此类型的输出。

func TRACE

func TRACE() *log.Logger

TRACE 获取 TRACE 级别的 log.Logger 实例,在未指定 trace 级别的日志时,该实例返回一个 nil。

func Trace

func Trace(v ...interface{})

Trace 相当于 TRACE().Println(v...) 的简写方式

func Tracef

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

Tracef 相当于 TRACE().Printf(format, v...) 的简写方式

func WARN

func WARN() *log.Logger

WARN 获取 WARN 级别的 log.Logger 实例,在未指定 warn 级别的日志时,该实例返回一个 nil。

func Warn

func Warn(v ...interface{})

Warn 相当于 WARN().Println(v...) 的简写方式

func Warnf

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

Warnf 相当于 WARN().Printf(format, v...) 的简写方式

Types

type Logs

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

Logs 日志输出

func New

func New() *Logs

New 声明 Logs 变量

func (*Logs) All

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

All 向所有的日志输出内容

func (*Logs) Allf

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

Allf 向所有的日志输出内容

func (*Logs) CRITICAL

func (logs *Logs) CRITICAL() *log.Logger

CRITICAL 获取 CRITICAL 级别的 log.Logger 实例,在未指定 critical 级别的日志时,该实例返回一个 nil。

func (*Logs) Critical

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

Critical 相当于 CRITICAL().Println(v...)的简写方式

func (*Logs) Criticalf

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

Criticalf 相当于 CRITICAL().Printf(format, v...) 的简写方式

func (*Logs) DEBUG

func (logs *Logs) DEBUG() *log.Logger

DEBUG 获取 DEBUG 级别的 log.Logger 实例,在未指定 debug 级别的日志时,该实例返回一个 nil。

func (*Logs) Debug

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

Debug 相当于 DEBUG().Println(v...) 的简写方式

func (*Logs) Debugf

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

Debugf 相当于 DEBUG().Printf(format, v...) 的简写方式

func (*Logs) ERROR

func (logs *Logs) ERROR() *log.Logger

ERROR 获取 ERROR 级别的 log.Logger 实例

在未指定 error 级别的日志时,该实例返回一个 nil。

func (*Logs) Error

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

Error 相当于 ERROR().Println(v...) 的简写方式

func (*Logs) Errorf

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

Errorf 相当于 ERROR().Printf(format, v...) 的简写方式

func (*Logs) Fatal

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

Fatal 输出错误信息然后退出程序

func (*Logs) Fatalf

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

Fatalf 输出错误信息然后退出程序

func (*Logs) Flush

func (logs *Logs) Flush()

Flush 输出所有的缓存内容

若是通过 os.Exit() 退出程序的,在执行之前, 一定记得调用 Flush() 输出可能缓存的日志内容。

func (*Logs) INFO

func (logs *Logs) INFO() *log.Logger

INFO 获取 INFO 级别的 log.Logger 实例,在未指定 info 级别的日志时,该实例返回一个 nil。

func (*Logs) Info

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

Info 相当于 INFO().Println(v...) 的简写方式

Info 函数默认是带换行符的,若需要不带换行符的,请使用 DEBUG().Print() 函数代替。 其它相似函数也有类型功能。

func (*Logs) Infof

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

Infof 相当于 INFO().Printf(format, v...) 的简写方式

func (*Logs) Init

func (logs *Logs) Init(cfg *config.Config) error

Init 从 config.Config 中初始化整个 logs 系统

func (*Logs) Panic

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

Panic 输出错误信息然后触发 panic

func (*Logs) Panicf

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

Panicf 输出错误信息然后触发 panic

func (*Logs) SetOutput

func (logs *Logs) SetOutput(level int, w io.Writer, prefix string, flag int) error

SetOutput 设置某一个类型的输出通道

若将 w 设置为 nil 等同于 ioutil.Discard,即关闭此类型的输出。

func (*Logs) TRACE

func (logs *Logs) TRACE() *log.Logger

TRACE 获取 TRACE 级别的 log.Logger 实例,在未指定 trace 级别的日志时,该实例返回一个 nil。

func (*Logs) Trace

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

Trace 相当于 TRACE().Println(v...) 的简写方式

func (*Logs) Tracef

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

Tracef 相当于 TRACE().Printf(format, v...) 的简写方式

func (*Logs) WARN

func (logs *Logs) WARN() *log.Logger

WARN 获取 WARN 级别的 log.Logger 实例,在未指定 warn 级别的日志时,该实例返回一个 nil。

func (*Logs) Warn

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

Warn 相当于 WARN().Println(v...) 的简写方式

func (*Logs) Warnf

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

Warnf 相当于 WARN().Printf(format, v...) 的简写方式

type WriterInitializer

type WriterInitializer func(cfg *config.Config) (io.Writer, error)

WriterInitializer io.Writer 实例的初始化函数。 args 参数为对应的 XML 节点的属性列表。

Directories

Path Synopsis
Package config 表示 logs 包的配置文件处理。
Package config 表示 logs 包的配置文件处理。
internal
initfunc
Package initfunc 实现了 github.com/issue9/writers 下的 WriterInitializer 接口
Package initfunc 实现了 github.com/issue9/writers 下的 WriterInitializer 接口
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