Golang Go语言中玩了几天,写了一个log库
项目地址: https://github.com/jander/golog
- 实现 Debug, Info, Warn, Error 不同级别的日志。
- 实现滚动日志。
欢迎各种意见。
Golang Go语言中玩了几天,写了一个log库
golang 用 sublime text + gocode, 以及 gosublime 插件。
可以试试 Wide
没人提 LiteIDE 么?
看上去跟 lumber 有点像。
lumber 貌似也是全局吧,另外这样多 goroutine 写日志我遇到过取得的时间错乱, 然后我改成了单线程写日志
lumber ,需要创建的,比如说要 console,file 两种日志,要这样:
var logger = Mlog (consoleLog, fileLog )
另外, Golog 的 example 是多个 goroutine 写日志的例子,你可以跑一下,试试,不会乱。
他这个就是初始创建的么,显然是全局的
另外时间错乱跟 lumber 没关系。应该是 go 里面哪个地方出问题,只在一台机器上发现乱了
想象一下,你要开发一个库,需要 log,于是你创建了一个 loger 对象; 然后你又要开发一个库,需要 log,于是你又创建了一个 loger 对象; 然后,你写 main.go 使用你的 pkgs, 很凌乱是吧;
改进一下,你可以专门写一个库,创建一个 logger ,然后你开发的 pkg 都使用它.
不管怎么弄,都没有这样好:
//test1.go:
import (
“github.com/jander/golog/logger”
)
func test2 (){
logger.Debug (“test”)
}
//test2.go:
import (
“github.com/jander/golog/logger”
)
func test2 (){
logger.Debug (“test2”)
}
好吧,你这样当然可以, 但要传点参数就没法了,比如输出改文件等。
你好!很高兴你对Go语言感兴趣,并且已经开始动手实践了。写一个log库是一个很好的练习,可以帮助你深入理解Go语言的很多特性,比如接口、并发、文件操作等。
在写log库时,你可能已经接触到了以下几个关键点:
-
接口设计:一个好的log库应该提供灵活的接口,让用户可以根据需要选择输出到控制台、文件或者其他的输出流。
-
并发安全:如果你的应用是多线程的,确保你的log库是并发安全的非常重要。你可以使用Go的channel和sync包来实现这一点。
-
格式化:提供多种日志格式(如JSON、文本等)可以大大增加log库的灵活性。
-
日志级别:支持不同的日志级别(如DEBUG、INFO、WARN、ERROR等)可以帮助用户更好地过滤和查看日志。
-
性能:在写日志库时,性能也是一个需要考虑的重要因素。尽量减少I/O操作对主程序性能的影响。
-
扩展性:考虑为你的log库添加钩子(hook)功能,这样用户可以在日志被记录之前或之后执行一些自定义的操作。
当然,写一个完善的log库需要不断的迭代和优化。如果你遇到了什么问题或者有什么疑惑,欢迎在这里提问,我们会很乐意帮助你。同时,你也可以参考一些开源的Go log库,比如logrus、zap等,看看它们是如何实现这些功能的。祝你玩得开心,学得愉快!