这次聊聊golang日志模块的详细用法。golang的日志输出一般用的是标准库log库包。 话说Golang的log实现的功能跟别语言的日志没啥区别。
该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新。
下面是golang log库包的几个重要函数说明.
xiaorui.cc //定义logger, 传入参数 文件,前缀字符串,flag标记 func New(out io.Writer, prefix string, flag int) *Logger //设置flag格式 func SetFlags(flag int) //配置log的输出格式 func SetPrefix(prefix string)
下面是golang log包参数中flag的用法。 flag有根据时间的,也有根据code行号的。
Ldate = 1 << iota // the date: 2009/01/23 形如 2009/01/23 的日期 Ltime // the time: 01:23:23 形如 01:23:23 的时间 Lmicroseconds // microsecond resolution: 01:23:23.123123. 形如01:23:23.123123 的时间 Llongfile // full file name and line number: /a/b/c/d.go:23 全路径文件名和行号 Lshortfile // final file name element and line number: d.go:23. overrides Llongfile 文件名和行号 LstdFlags = Ldate | Ltime // 日期和时间
废话不多说,直接通过一个完整的实例说明golang log实例。
#xiaorui.cc package main import ( "log" "os" ) func main(){ // 定义一个文件 fileName := "ll.log" logFile,err := os.Create(fileName) defer logFile.Close() if err != nil { log.Fatalln("open file error !") } // 创建一个日志对象 debugLog := log.New(logFile,"[Debug]",log.LstdFlags) debugLog.Println("A debug message here") //配置一个日志格式的前缀 debugLog.SetPrefix("[Info]") debugLog.Println("A Info Message here ") //配置log的Flag参数 debugLog.SetFlags(debugLog.Flags() | log.LstdFlags) debugLog.Println("A different prefix") }
在github中找到了一个老外封装的go-logging库包,还真是特别好用。 go-logging可自定义日志输出的格式和颜色。
#http://xiaorui.cc package main import ( "os" "fmt" "github.com/op/go-logging" ) var log = logging.MustGetLogger("example") var format = logging.MustStringFormatter( `%{color}%{time:15:04:05.000} %{shortfunc} > %{level:.4s} %{id:03x}%{color:reset} %{message}`, ) type Password string func (p Password) Redacted() interface{} { return logging.Redact(string(p)) } func main() { logFile, err := os.OpenFile("log.txt", os.O_WRONLY,0666) if err != nil{ fmt.Println(err) } backend1 := logging.NewLogBackend(logFile, "", 0) backend2 := logging.NewLogBackend(os.Stderr, "", 0) backend2Formatter := logging.NewBackendFormatter(backend2, format) backend1Leveled := logging.AddModuleLevel(backend1) backend1Leveled.SetLevel(logging.INFO, "") logging.SetBackend(backend1Leveled, backend2Formatter) log.Debugf("debug %s", Password("secret")) log.Info("info") log.Notice("notice") log.Warning("warning") log.Error("xiaorui.cc") log.Critical("太严重了") }
上面的go-logging代码运行后的输出:
[ruifengyun@devops ~ ]go run l.go
18:26:36.456 main ▶ DEBU 001 debug ******
18:26:36.456 main ▶ INFO 002 info
18:26:36.456 main ▶ NOTI 003 notice
18:26:36.456 main ▶ WARN 004 warning
18:26:36.456 main ▶ ERRO 005 xiaorui.cc
18:26:36.456 main ▶ CRIT 006 太严重了
[ruifengyun@devops ~ ] cat log.txt
info
notice
warning
xiaorui.cc
太严重了
看看下面的日志有颜色效果吧…. 有点意思…
END.