[feat] nazalog: 增加Option.HookBackendOutFn,业务方可以注册回调拿到最终的日志内存数据

pull/12/head
q191201771 2 years ago
parent 45a46a252b
commit 14c9a1d1ce

@ -6,7 +6,7 @@
//
// Author: Chef (191201771@qq.com)
// package nazalog 日志库
// Package nazalog 日志库
package nazalog
import "errors"
@ -62,7 +62,11 @@ type Logger interface {
//
Sync()
// WithPrefix 添加前缀新生成一个Logger对象如果老Logger也有prefix则老Logger依然打印老prefix新Logger打印多个prefix
// WithPrefix
//
// 添加前缀新生成一个Logger对象如果老Logger也有prefix则老Logger依然打印老prefix新Logger打印多个prefix。
//
// 返回的Logger对象是新的底层的 core 是同一个
//
WithPrefix(s string) Logger
@ -89,6 +93,8 @@ type Logger interface {
Init(modOptions ...ModOption) error
}
type HookBackendOutFn func(level Level, line []byte)
type Option struct {
Level Level `json:"level"` // 日志级别,大于等于该级别的日志才会被输出
@ -105,6 +111,18 @@ type Option struct {
LevelFlag bool `json:"level_flag"` // 日志是否包含日志级别字段
AssertBehavior AssertBehavior `json:"assert_behavior"` // 断言失败时的行为
// HookBackendOutFn
//
// hook后端输出的日志内容。
//
// 业务场景比如业务方使用了nazalog向日志文件输出日志与之同时还想要再程序中实时获取一份日志内容。
//
// 每次回调一行日志。
// 获取的是全量日志。
// 阻塞函数。
// 回调结束后,内部会服用回调中日志内容的内存块。
HookBackendOutFn HookBackendOutFn
}
// 没有配置的属性,将按如下配置

@ -282,6 +282,11 @@ func (l *logger) Out(level Level, calldepth int, s string) {
}
}
// 输出至hook
if l.core.option.HookBackendOutFn != nil {
l.core.option.HookBackendOutFn(level, l.core.buf.Bytes())
}
l.core.m.Unlock()
}

@ -396,6 +396,25 @@ func TestLogger_GetOption(t *testing.T) {
assert.Equal(t, nazalog.LevelDebug, o.Level)
}
func TestHook(t *testing.T) {
l, _ := nazalog.New(func(option *nazalog.Option) {
option.HookBackendOutFn = func(level nazalog.Level, line []byte) {
fmt.Printf("%s", string(line))
assert.Equal(t, nazalog.LevelDebug, level)
}
})
l.Debug("hookme")
l2, _ := nazalog.New()
l2.Init(func(option *nazalog.Option) {
option.HookBackendOutFn = func(level nazalog.Level, line []byte) {
fmt.Printf("%s", string(line))
assert.Equal(t, nazalog.LevelInfo, level)
}
})
l2.Infof("hookme %d", 2)
}
func BenchmarkNazaLog(b *testing.B) {
b.ReportAllocs()

Loading…
Cancel
Save