看了下go的log模块代码,写一条日志的做法是
1,拼接日志内容
2,加锁
3,写文件
4,解锁。
这个做法在协程很多的情况下,效率比较低。
官方为啥没有提供一个高效率的版本呢?
我自己撸了一个,也就200多行代码(https://github.com/Titanarthas/s_g_log)
对比测试了下,50000个协程,每个协程写11条日志。
官方版本的log耗时是6秒多,我自己写的版本是2.4秒,也没发现我的实现有啥问题
标准库仅仅只是提供一个基本能用的简单实现而已,如果觉得不够可以自己开发,不可能把什么都放进标准库。其次,谁说log必须写文件?如果是网络统一收集呢?又说,如果觉得慢,干嘛不在File上套一个bufio呢?另外可以看看这个 github.com/cihub/seelog
#13
更多评论
一个好的日志库非常难的,比如你写的代码就没有确保日志一定会写入到文件,你可以查看一下glog是如何实现的。你msgChan是无缓存的,如何确保不阻塞?
#1