logs

package module
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Sep 4, 2018 License: MIT Imports: 11 Imported by: 43

README

logs Build Status

一个可配置的日志服务包。可以通过 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
文档

Go Walker GoDoc

版权

本项目采用 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(v ...interface{})

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

func Fatalf

func Fatalf(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 InitFromXMLFile

func InitFromXMLFile(path string) error

InitFromXMLFile 从一个 XML 文件中初始化日志系统。

再次调用该函数,将会根据新的配置文件重新初始化日志系统。

func InitFromXMLString

func InitFromXMLString(xml string) error

InitFromXMLString 从一个 XML 字符串初始化日志系统。

再次调用该函数,将会根据新的配置文件重新初始化日志系统。

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 SetWriter

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

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

若将 w 设置为 nil 等同于 iotuil.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 WriterInitializer

type WriterInitializer func(args map[string]string) (io.Writer, error)

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

Directories

Path Synopsis
internal
config
Package config 表示 logs 包的配置文件处理。
Package config 表示 logs 包的配置文件处理。
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