dw网站制作怎么做滑动的图片,南阳网站建设口碑,电子元器件网站怎么做,移动互联网创业上一篇文章讲解了 log/slog 包中的 LogValuer 和日志记录函数的正确包装方法#xff0c;本文详细讲解一下 slog.Record 结构体的使用方法和需要注意的点。
slog.Record
Record 类型用来保存日志事件的信息#xff0c;定义如下#xff1a;
type Record struct {Time time.…上一篇文章讲解了 log/slog 包中的 LogValuer 和日志记录函数的正确包装方法本文详细讲解一下 slog.Record 结构体的使用方法和需要注意的点。
slog.Record
Record 类型用来保存日志事件的信息定义如下
type Record struct {Time time.TimeMessage stringLevel LevelPC uintptrfront [nAttrsInline]AttrnFront intback []Attr
}
有如下几个方法
func (r Record) Clone() Record返回一个不共享状态的副本Record 和其克隆副本都可以被修改并且不会相互干扰。func (r Record) NumAttrs() int返回日志记录中属性的个数。func (r Record) Attrs(f func(Attr) bool)使用函数 f 作用于日志记录中的每个属性如果 f 返回 false则停止迭代。func (r *Record) AddAttrs(attrs ...Attr)将给定的属性追加到日志记录的属性列表中。func (r *Record) Add(args ...any)将参数转换为 Logger.Log 中描述的 Attrs然后将Attrs 追加到日志记录中的 Attrs 列表。func (r Record) source() *Source返回日志事件的 Source。
使用示例
可以使用 slog.NewRecord 函数创建一个 Record 对象使用 Record 记录日志的示例代码如下
package mainimport (contextlog/slogostime
)func main() {logger : slog.New(slog.NewTextHandler(os.Stdout, nil))r : slog.NewRecord(time.Now(), slog.LevelInfo, test, 1)r.Add(title, 路多辛的博客)_ logger.Handler().Handle(context.Background(), r)
}
运行程序输出结果如下
time2023-10-17T21:01:12.04108:00 levelINFO msgtest title路多辛的博客
在日常的使用场景中会有这么一种情况首先创建一个基础的 Record 对象然后会使用不同的 Handler 来基于这个对象分别做不同的处理。这种场景下需要先调用 Clone 方法克隆一份 Record 对象的副本然后传递给其他 Handler 做处理。这样对副本的修改不会影响到原本的对象对原本对象的修改也不会影响到副本示例代码如下
package mainimport (contextlog/slogostime
)func main() {logger : slog.New(slog.NewTextHandler(os.Stdout, nil))r : slog.NewRecord(time.Now(), slog.LevelInfo, test, 1)r.Add(title, 路多辛的博客)_ logger.Handler().Handle(context.Background(), r)r2 : r.Clone()r2.Add(subTitle, 路多辛的所思所想)l : slog.NewJSONHandler(os.Stdout, nil)_ l.Handle(context.Background(), r2)
}
运行程序输出结果如下
time2023-10-17T21:24:23.58808:00 levelINFO msgtest title路多辛的博客
{time:2023-10-17T21:24:23.58851708:00,level:INFO,msg:test,title:路多辛的博客,subTitle:路多辛的所思所想}
小结
本文讲解了 slog.Record 结构体的简单使用方法和使用时需要注意的点对应的方法使用起来也都比较简单不再逐个讲解可以自己去尝试使用。