go的第三方框架中已经有很多日志库了,为什么还要自己写一遍。俗话说,好记性不如烂笔头,更何况是编程语言呢。多写多练才能使自己技术进步。
一般来说,日志库支持文件写入和console显示,还有的支持写入在网络服务中,这次的日志库,只需要实现文件写入和console就可以了。
1、首先我们需要定义日志的打印级别:
- Debug: 调试程序,日志最详细。但是会影响程序的性能。
- Trace: 追踪问题。
- Info: 打印日志运行中比较重要的信息,比如访问日志。
- Warn: 警告,说明程序中出现了潜在的问题。
- Error: 错误,程序运行发生了错误,但是不影响程序运行。
- Fatal: 严重错误, 会导致程序退出。
2、日志存储的位置
- 直接输出到console
- 打印到文件
3、使用接口来实现
为什么要采用接口的方式来实现,来个例子就明白了。
新建一个log项目,新建一个file.go
:
package log
import "fmt"
type FileLog struct {
}
func NewFileLog(file string) *FileLog {
return &FileLog()
}
func (f *FileLog) LogDebug(msgstring) {
fmt.Println(msg) // 假设这里是写入文件
}
再新建一个console.go
文件:
package main
import "fmt"
type ConsoleLog struct {
}
func NewConsoleLog() *ConsoleLog {
return &ConsoleLog()
}
func (c *ConsoleLog) LogDebug(msgstring) {
fmt.Println(msg)
}
然后我们再新建一个server项目,新建一个main.go
文件,调用刚才写的两个文件进行日志模拟写入打印。
比如现在我们进行日志文件的写入:
package main
import "log"
func main() {
file := log.NewFileLog("/xxx/xx")
file.LogDebug("This is debug log")
}
又或者我们进行日志的打印:
package main
import "log"
func main() {
console := log.NewConsoleLog()
console("This is debug log")
}
这样写的时候是看不出来有什么的问题,但是如果项目的代码累计起来了,准备进行上线,这时候你需要将之前日志打印的地方全部修改为日志文件写入,需要一个一个文件的修改,非常的浪费的时间。所以采用接口开发的日志,在扩展程序的维护上会非常的方便。下一遍我们开始开发日志库。