go log包分析

log包是go中输出日志的包,主要作用就是把日志输出,只要是实现了io.writer接口的write方法就可以输出到任意地方,默认输出到控制台。

type Writer interface {
    Write(p []byte) (n int, err error)
}

log包比较简单,常用的方法主要分三类,分别是Print 、Panic 、Fatal 这三种,我们分别拿三个方法看看

func Print(v ...interface{}) {
    std.Output(2, fmt.Sprint(v...))
}
func Fatal(v ...interface{}) {
    std.Output(2, fmt.Sprint(v...))
    os.Exit(1)
}
func Panic(v ...interface{}) {
    s := fmt.Sprint(v...)
    std.Output(2, s)
    panic(s)
}

从这三个方法可以看出区别,print就是简单输出,fatal是输出后调用os.Exit ,panic是输出后会调用panic。所以这三个方法在用的时候就注意,如果只是想打印到日志不影响程序运行,就用print 相关方法,如果是输出后立即退出,就用fatal方法,如果是输出后报个程序异常,那就用panic方法。

简单举几个例子,来说明使用方法
1、打印日志到文件

package main
import (
        "log"
        "os"
        "time"
)
func init() {
        file := "./" +"message"+ ".txt"
        logFile, err := os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0766)
        if err != nil {
                panic(err)
        }
        log.SetOutput(logFile) // 将文件设置为log输出的文件
        log.SetPrefix("[qSkipTool]")
        log.SetFlags(log.LstdFlags | log.Lshortfile | log.LUTC)
        return
}

func main() {
        log.Println("Hello world!") // log 还是可以作为输出的前缀
        return
}

output:

// message.txt里面 显示
[qSkipTool]2020/05/04 09:22:15 main.go:20: Hello world! 

方法二:

package main

import (
        "log"
        "os"
        "time"
)
var loger *log.Logger

func init() {
        file := "./" + time.Now().Format("20180102") + ".txt"
        logFile, err := os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0766)
        if err != nil {
                panic(err)
        }
        loger = log.New(logFile, "[qSkiptool]",log.LstdFlags | log.Lshortfile | log.LUTC) // 将文件设置为loger作为输出
        return
}

func main() {
        loger.Println("Hello:world!") // 使用的时候,需要采用loger作为输出的前缀
        return
}

上面两个方法作用一样,只是调用不同的方法初始化而已。使用也比较简单。如果想把数据输出到数据库,redis或者消息队列里,只需要实现io.writer接口即可

你可能感兴趣的:(go log包分析)