Documentation ¶
Index ¶
- Variables
- func Crit(msg string, ctx ...interface{})
- func Debug(msg string, ctx ...interface{})
- func Error(msg string, ctx ...interface{})
- func FormatLogfmtInt64(n int64) string
- func FormatLogfmtUint64(n uint64) string
- func Info(msg string, ctx ...interface{})
- func PrintOrigins(enabled bool)
- func Trace(msg string, ctx ...interface{})
- func Warn(msg string, ctx ...interface{})
- type Ctx
- type Format
- type Handler
- func DiscardHandler() Handler
- func FileHandler(path string, fmtr Format) (Handler, error)
- func FilterHandler(fn func(r *Record) bool, h Handler) Handler
- func FuncHandler(fn func(r *Record) error) Handler
- func LazyHandler(h Handler) Handler
- func LvlFilterHandler(maxLvl Lvl, h Handler) Handler
- func NetHandler(network, addr string, fmtr Format) (Handler, error)
- func StreamHandler(wr io.Writer, fmtr Format) Handler
- func SyncHandler(h Handler) Handler
- type Lazy
- type Logger
- type Lvl
- type Record
- type RecordKeyNames
- type TerminalStringer
Constants ¶
This section is empty.
Variables ¶
var (
StdoutHandler = StreamHandler(os.Stdout, LogfmtFormat())
)
Functions ¶
func FormatLogfmtInt64 ¶
FormatLogfmtInt64 ♏ |作者:吴翔宇| 🍁 |日期:2022/11/22|
FormatLogfmtInt64 方法接受一个整数作为输入参数,注意该方法与 FormatLogfmtUint64 方法不同的地方在于, 那个方法仅限于接受正整数作为输入参数,而该方法可以接受正数,也可以接受负数,然后对给定的整数进行格式化输出, 例如:
- 如果给定的整数为:1234567890,得到的输出是:1,234,567,890
- 如果给定的整数为:-1234567890,得到的输出是:-1,234,567,890
func FormatLogfmtUint64 ¶
FormatLogfmtUint64 ♏ |作者:吴翔宇| 🍁 |日期:2022/11/22|
FormatLogfmtUint64 方法接受一个uint64类型的正整数作为输入,然后对该整数进行格式化输出,例如:
- 给定的正整数是:1234567890,得到的输出是:1,234,567,890
func PrintOrigins ¶
func PrintOrigins(enabled bool)
PrintOrigins ♏ |作者:吴翔宇| 🍁 |日期:2022/11/22|
PrintOrigins 接受一个bool类型的数据作为输入参数,该方法是一个开关函数,如果传入的参数等于true,那 么在以后打印日志信息,会打印出输出日志信息所在的代码文件和代码行,类似于:"file:line"。
Types ¶
type Format ¶
func FormatFunc ¶
func JSONFormat ¶
func JSONFormat() Format
JSONFormat ♏ |作者:吴翔宇| 🍁 |日期:2022/11/22|
JSONFormat 返回一个格式化句柄,该句柄将 Record 格式化为 JSON 样式的输出格式,例如:
实例化一个 Record 对象: r := Record{ Time: time.Now(), Lvl: 3, Msg: "Start network", Ctx: []interface{}{"app", "ethereum/server", "consensus", "POS"}, Call: stack.Caller(2), KeyNames: RecordKeyNames{ Time: timeKey, Msg: msgKey, Lvl: lvlKey, Ctx: ctxKey, }, } 经过 JSONFormat 方法格式化后得到: {"app":"ethereum/server","consensus":"POS","lvl":"info","msg":"Start network","t":"2022-11-22T16:08:06.96890076+08:00"}
func LogfmtFormat ¶
func LogfmtFormat() Format
LogfmtFormat ♏ |作者:吴翔宇| 🍁 |日期:2022/11/22|
LogfmtFormat 方法将日志记录里的键值对按照人们易读的方式组合输出,例如:
t=2022-11-22T19:51:30+08:00 lvl=info msg="Start network" app=ethereum/server consensus=POS
type Handler ¶
Handler ♏ |作者:吴翔宇| 🍁 |日期:2022/11/21|
Handler 接收日志记录器产生的日志条目,然后 Handler 定义了怎样将日志条目输出出去。
func DiscardHandler ¶
func DiscardHandler() Handler
DiscardHandler ♏ |作者:吴翔宇| 🍁 |日期:2022/11/21|
DiscardHandler 方法用于禁用日志功能。
func FileHandler ¶
FileHandler ♏ |作者:吴翔宇| 🍁 |日期:2022/11/21|
FileHandler 方法接受两个参数,第一个参数是日志文件的路径,第二个参数是记载日志的格式,如果给定的日志文件 存在,就在该文件后面追加日志条目,否则就创建一个日志文件。
func FilterHandler ¶
FilterHandler ♏ |作者:吴翔宇| 🍁 |日期:2022/11/21|
FilterHandler 接受两个参数作为入参,分别是函数fn func(r *Record) bool和 Handler,如果fn的返回值等于 true,则调用 Handler 的Log方法将日志内容输出出去,否则什么也不干,忽略这条日志信息。例如,我们只输出日志中 存在"err"键,并且其对应的值不等于"nil"的日志:
logger.SetHandler(FilterHandler(func(r *Record) bool { for i := 0; i < len(r.Ctx); i += 2 { if r.Ctx[i] == "err" { return r.Ctx[i+1] != nil } } return false }, h))
func LazyHandler ¶
LazyHandler ♏ |作者:吴翔宇| 🍁 |日期:2022/11/21|
LazyHandler 方法接受一个 Handler 作为输入参数,LazyHandler 其实就是再将给定的 Handler 进行包装, LazyHandler 内部调用 FuncHandler 函数,并将其返回值返回,FuncHandler 接受的参数是一个函数的定义, 这个函数的定义是由 LazyHandler 函数设计的,将来我们调用 LazyHandler 函数返回的 Handler 的Log方法 时,实际上就是调用 LazyHandler -> FuncHandler -> 入参函数定义,在这个函数的定义内,会将日志记录 Record 里的 Ctx 过滤一遍,目的就是找到 Ctx 的value里面是否存在 Lazy 的实例,如果有的话,就执行这个 Lazy 实 例里的Fn函数,并将Fn函数的返回值替代Ctx中对应位置处的value。
func LvlFilterHandler ¶
LvlFilterHandler ♏ |作者:吴翔宇| 🍁 |日期:2022/11/21|
LvlFilterHandler 方法接受两个参数,分别是日志等级和 Handler,第一个参数设置了日志等级阈值,只有日志级别 小于第一个参数的日志才能被输出,众所周知,critical日志级别最高,trace日志级别最低。
func NetHandler ¶
NetHandler ♏ |作者:吴翔宇| 🍁 |日期:2022/11/21|
NetHandler 接受三个参数,前两个参数分别是网络类型和网络地址,例如:"tcp"和"67.28.31.12",第二个参数是 日志记载格式,该方法会主动拨通给定的网络地址,然后建立一个网络连接conn,并通过conn将日志内容发送给另一端的 网络设备,在那台网络设备上显式日志记录。
func StreamHandler ¶
StreamHandler ♏ |作者:吴翔宇| 🍁 |日期:2022/11/21|
StreamHandler 接受两个参数:io.Writer 和 Format,其中第一个参数用来接受日志信息,第二个参数决定将以 什么样的格式把日志记录写入到 io.Writer 里。
func SyncHandler ¶
SyncHandler ♏ |作者:吴翔宇| 🍁 |日期:2022/11/21|
SyncHandler 接收一个 Handler 作为输入参数,将给定的 Handler 包装成一个多线程安全的 Handler。
type Logger ¶
type Logger interface { // New 生成一个新的日志记录器,给定的ctx是若干对键值对,这若干对键值对会在以后每次输出日志记录时被输出出去 New(ctx ...interface{}) Logger GetHandler() Handler SetHandler(h Handler) // Trace ctx是若干对键值对 Trace(msg string, ctx ...interface{}) Debug(msg string, ctx ...interface{}) Info(msg string, ctx ...interface{}) Warn(msg string, ctx ...interface{}) Error(msg string, ctx ...interface{}) Crit(msg string, ctx ...interface{}) }
Logger ♏ |作者:吴翔宇| 🍁 |日期:2022/11/21|
Logger
type Lvl ¶
type Lvl int
func LvlFromString ¶
LvlFromString ♏ |作者:吴翔宇| 🍁 |日期:2022/11/21|
LvlFromString 方法接受一个字符串形式的日志等级作为输入,然后返回 Lvl 类型的值,如下所示:
"trace", "trce": LvlTrace "debug", "dbug": LvlDebug "info": LvlInfo "warn": LvlWarn "error", "eror": LvlError "crit": LvlCrit
func (Lvl) AlignedString ¶
AlignedString ♏ |作者:吴翔宇| 🍁 |日期:2022/11/21|
AlignedString 方法返回日志级别的字符串名,返回的字符串名都是由5个字符组成,分别如下所示:
LvlTrace: "TRACE" LvlDebug: "DEBUG" LvlInfo: "INFO " LvlWarn: "WARN " LvlError: "ERROR" LvlCrit: "CRIT "
type Record ¶
type Record struct { Time time.Time Lvl Lvl Msg string Ctx []interface{} Call stack.Call KeyNames RecordKeyNames }
Record ♏ |作者:吴翔宇| 🍁 |日期:2022/11/21|
Record
type TerminalStringer ¶
type TerminalStringer interface {
TerminalString() string
}