zap日志写入通道被覆盖
描述
实现了一个io.Writer接口,允许zap日志写入,传递给界面,出现了日志被覆盖、重复的情况。
原因
io.Writer的接口Write传入的[]byte真实类型是slice。通道传递slice时,用的是引用传递,所以真实数据有被覆盖的情况
示例
- zap初始化
...
out = COut()
zapcore.NewCore(encoder, zapcore.AddSync(out), clevel),
...
- 自定义日志写入Channel
package logsvar _GlobalChanOutput = &ChanOutput{outs: make([]chan *[]byte, 0),
}/*---------------------------------------全局函数
示例logs.COut().AddOut(xx)
---------------------------------------*///全局ChanOutput
func COut() *ChanOutput{return _GlobalChanOutput
}/*---------------------------------------log to channel
---------------------------------------*/type ChanOutput struct{outs []chan *[]byte
}//io.Writer接口
func (c *ChanOutput) Write(p []byte) (n int, err error) {count :=0//数据复制(防止被覆盖)_p := make([]byte, len(p))copy(_p, p)for _, out :=range c.outs{select{case out <- &_p:count += 1default:}}return count, nil
}func (c *ChanOutput) AddOut(out chan *[]byte) {c.outs = append(c.outs, out)
}
- 读取日志
logOut := make(chan *[]byte, 1024)
logs.COut().AddOut(logOut)pctx, pctxCancel := context.WithCancel(context.Background())
go func(ctx context.Context){select {case msg := <- logOut:fmt.Println(string(*msg))case <-ctx.Done():break}
}(pctx)
佛說大乘無量壽莊嚴清淨平等覺經pdf
净土大经科注2014-doc
此生必看的科学实验-水知道答案
印光大师十念法(胡小林主讲第1集)
zap日志写入通道被覆盖相关推荐
- 【Go进阶】如何让你Go项目中日志清晰有趣-Zap日志库
本文先介绍了Go语言原生的日志库的使用,然后详细介绍了非常流行的Uber开源的zap日志库,同时介绍了如何搭配Lumberjack实现日志的切割和归档. Zap日志库在Go语言项目中的使用 在许多Go ...
- go.uber.org/zap日志库
文章目录 go.uber.org/zap日志库 1.GO SDK里Logger优缺点 2.介绍Uber-go zap 3.安装zap依赖 4.zap.NewProductionEncoderConfi ...
- 在Go语言项目中使用Zap日志库
在Go语言项目中使用Zap日志库 Go语言原生的日志库的使用,然后详细介绍了非常流行的Uber开源的zap日志库,同时介绍了如何搭配Lumberjack实现日志的切割和归档. 一.在Go语言项目中使用 ...
- 一文告诉你如何用好uber开源的zap日志库
1. 引子 日志在后端系统中有着重要的地位,通过日志不仅可以直观看到程序的当前运行状态,更重要的是日志可以在程序发生问题时为开发人员提供线索. 在Go生态中,logrus[2]可能是使用最多的Go日志 ...
- python日志输出到屏幕,python日志写入文件
python日志输出到屏幕,python日志写入文件 日志 日志是跟踪软件运行时所发生的事件的一种方法.软件开发者在代码中调用日志函数,表明发生了特定的事件.事件由描述性消息描述,该描述性消息可以可选 ...
- Python + logging 输出到屏幕,将log日志写入文件(亲测)
日志 日志是跟踪软件运行时所发生的事件的一种方法.软件开发者在代码中调用日志函数,表明发生了特定的事件.事件由描述性消息描述,该描述性消息可以可选地包含可变数据(即,对于事件的每次出现都潜在地不同的数 ...
- go语言 gin框架中集成zap日志库
在go语言gin框架中,日志是默认输出到终端的,但是我们在实际工作中,一般来说是需要记录服务器日志的.而最常用的日志库就是zap日志库,我们需要将gin在终端输出的内容通过zap日志库记录到文件中,首 ...
- Go zap日志库使用
使用案例 package mainimport ("go.uber.org/zap" ) // 两种类型的日志记录器sugarlogger 和logger var sugarlog ...
- Python logging log日志写入文件
转载: https://www.cnblogs.com/nancyzhu/p/8551506.html 日志 日志是跟踪软件运行时所发生的事件的一种方法.软件开发者在代码中调用日志函数,表明发生了特定 ...
最新文章
- 使用深度学习检测混凝土结构中的表面裂缝
- 新人python2和python3的区别_未明学院:Python2与Python3的主要区别
- Matlab R2018a 中文版安装教程(同时适用于大部分其他版本)
- js null ,null没有typeof返回值为undefine 即 null没有返回类型的
- [mvc] 简单的forms认证
- python三级联动菜单_详解element-ui级联菜单(城市三级联动菜单)和回显问题
- React开发(150):注意定义数组格式
- python词云改颜色_一种用Python生成词云
- 简单的Postman,还能玩出花?
- 排序算法(4)----快速排序
- Django----bootstrap导航栏的使用
- 单件模式的两个简单实例
- tortoisegit pull 远程拉取代码,提示需要密码
- ubuntu 使用gspca安装摄像头
- 怎样进入金蝶服务器修改参数,金蝶KIS专业版启用后如何后台修改系统参数
- win10配置免密登录linux(centos7)
- 【魏先生搞定Python系列】一文搞定SQLAlchemy学习与使用
- 用树莓派做一个实时垃圾分类器|超实用!!
- 现实版《黑镜》上演!这位程序媛用 AI 让已故基友“永生”
- c语言软件开发心得: