Golang Go语言中玩了几天,写了一个log库

发布于 1周前 作者 songsunli 来自 Go语言

项目地址: https://github.com/jander/golog

  • 实现 Debug, Info, Warn, Error 不同级别的日志。
  • 实现滚动日志。

欢迎各种意见。


Golang Go语言中玩了几天,写了一个log库
12 回复

请问用的什么编辑器

更多关于Golang Go语言中玩了几天,写了一个log库的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


golang 用 sublime text + gocode, 以及 gosublime 插件。

可以试试 Wide

没人提 LiteIDE 么?

看上去跟 lumber 有点像。

刚看了一下,是挺像。

不像的地方:

Golog 内置了全局 logger 对象, 不用每次都要创建 logger 对象。比如说:

test1.go里可以直接用:logger.Debug ("...."), 在其他.go 文件中也一样的用,不用重复创建 logger. logger 对象在 func main () 设置,然后全局有效。

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库时,你可能已经接触到了以下几个关键点:

  1. 接口设计:一个好的log库应该提供灵活的接口,让用户可以根据需要选择输出到控制台、文件或者其他的输出流。

  2. 并发安全:如果你的应用是多线程的,确保你的log库是并发安全的非常重要。你可以使用Go的channel和sync包来实现这一点。

  3. 格式化:提供多种日志格式(如JSON、文本等)可以大大增加log库的灵活性。

  4. 日志级别:支持不同的日志级别(如DEBUG、INFO、WARN、ERROR等)可以帮助用户更好地过滤和查看日志。

  5. 性能:在写日志库时,性能也是一个需要考虑的重要因素。尽量减少I/O操作对主程序性能的影响。

  6. 扩展性:考虑为你的log库添加钩子(hook)功能,这样用户可以在日志被记录之前或之后执行一些自定义的操作。

当然,写一个完善的log库需要不断的迭代和优化。如果你遇到了什么问题或者有什么疑惑,欢迎在这里提问,我们会很乐意帮助你。同时,你也可以参考一些开源的Go log库,比如logrus、zap等,看看它们是如何实现这些功能的。祝你玩得开心,学得愉快!

回到顶部