go开发属于本身的日志库-日志库需求分析

go的第三方框架中已经有不少日志库了,为何还要本身写一遍。俗话说,好记性不如烂笔头,更况且是编程语言呢。多写多练才能使本身技术进步。编程

通常来讲,日志库支持文件写入和console显示,还有的支持写入在网络服务中,此次的日志库,只须要实现文件写入和console就能够了。网络

一、首先咱们须要定义日志的打印级别:

  1. Debug: 调试程序,日志最详细。可是会影响程序的性能。
  2. Trace: 追踪问题。
  3. Info: 打印日志运行中比较重要的信息,好比访问日志。
  4. Warn: 警告,说明程序中出现了潜在的问题。
  5. Error: 错误,程序运行发生了错误,可是不影响程序运行。
  6. Fatal: 严重错误, 会致使程序退出。

二、日志存储的位置

  1. 直接输出到console
  2. 打印到文件

三、使用接口来实现

为何要采用接口的方式来实现,来个例子就明白了。 新建一个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")
}

复制代码

又或者咱们进行日志的打印:spa

package main

import "log"

func main() {
    console := log.NewConsoleLog()
    console("This is debug log")
}

复制代码

这样写的时候是看不出来有什么的问题,可是若是项目的代码累计起来了,准备进行上线,这时候你须要将以前日志打印的地方所有修改成日志文件写入,须要一个一个文件的修改,很是的浪费的时间。因此采用接口开发的日志,在扩展程序的维护上会很是的方便。下一遍咱们开始开发日志库。debug

相关文章
相关标签/搜索