golang log15使用说明

gloang日志库log15使用说明:

介绍

log15是一个强大的结构化的golang日志包,支持日志颜色按等级输出,支持输出到终端、文件、流、系统日志和网络等。

import

import log "github.com/inconshreveable/log15"

使用

常规模式

log15 默认有5个日志等级,分别为Debug, Info,Warn,Error,Crit。每个函数都接受第一个字符串作为消息,后面加任意数量的键值对。如下所示:

package main

import (
   "github.com/spf13/viper"
   "os"
   "path/filepath"
   log "github.com/inconshreveable/log15"
)

func main() {
   viper.SetConfigName("configdemo")
   gopath := os.Getenv("GOPATH")
   for _, p := range filepath.SplitList(gopath) {
      confpath := filepath.Join(p, "conf")
      viper.AddConfigPath(confpath)
   }

   err := viper.ReadInConfig()
   if err != nil {
      log.Error("Read config file error!", "err", err.Error())
      return
   }
   log.Info("Config node:", "node", viper.GetString("node"))
   log.Warn("Config database:", "database", viper.GetString("database"))
   log.Crit("Config index:", "index", viper.GetString("index"))
   log.Info("Configs:", "node", viper.GetString("node"), "database", viper.GetString("database"), "index", viper.GetString("index"))
}

输出如下:

INFO[04-01|21:44:34] Config node:                             node=node1
WARN[04-01|21:44:34] Config database:                         database="db_user:db_password@tcp(db_host:db_port)/database?timeout=2s"
CRIT[04-01|21:44:34] Config index:                            index=1
INFO[04-01|21:44:34] Configs:                                 node=node1 database="db_user:db_password@tcp(db_host:db_port)/database?timeout=2s" index=1

日志上下文

我们可以使用log.New() 定义一个日志上下文,使用该日志对象打出的日志都会携带该上下文:

package main

import (
   "github.com/spf13/viper"
   "os"
   "path/filepath"
   log "github.com/inconshreveable/log15"
)

func main() {
   viper.SetConfigName("configdemo")
   gopath := os.Getenv("GOPATH")
   for _, p := range filepath.SplitList(gopath) {
      confpath := filepath.Join(p, "conf")
      viper.AddConfigPath(confpath)
   }
   err := viper.ReadInConfig()
   if err != nil {
      log.Error("Read config file error!", "err", err.Error())
      return
   }
   // contexts mode
   ctxLog := log.New("contexts", "log contexts")
   ctxLog.Info("Config node:", "node", viper.GetString("node"))
   ctxLog.Warn("Config database:", "database", viper.GetString("database"))
   ctxLog.Crit("Config index:", "index", viper.GetString("index"))
}

输出如下:

INFO[04-01|21:44:34] Config node:                             contexts="log contexts" node=node1
WARN[04-01|21:44:34] Config database:                         contexts="log contexts" database="db_user:db_password@tcp(db_host:db_port)/database?timeout=2s"
CRIT[04-01|21:44:34] Config index:                            contexts="log contexts" index=1

指定日志特殊输出格式

log15支持特殊格式的日志输出,如指定输出格式为json形式,如下程序所示:

package main

import (
   "github.com/spf13/viper"
   "os"
   "path/filepath"
   log "github.com/inconshreveable/log15"
)

func main() {
   viper.SetConfigName("configdemo")
   gopath := os.Getenv("GOPATH")
   for _, p := range filepath.SplitList(gopath) {
      confpath := filepath.Join(p, "conf")
      viper.AddConfigPath(confpath)
   }

   err := viper.ReadInConfig()
   if err != nil {
      log.Error("Read config file error!", "err", err.Error())
      return
   }
   // specify output
   specifyLog := log.New()
   specifyLog.SetHandler(log.StreamHandler(os.Stdout, log.JsonFormat()))
   specifyLog.Info("Config node:", "node", viper.GetString("node"))
   specifyLog.Warn("Config database:", "database", viper.GetString("database"))
   specifyLog.Crit("Config index:", "index", viper.GetString("index"))
}

输出如下:

{"lvl":"info","msg":"Config node:","node":"node1","t":"2018-04-01T21:44:34.197881804+08:00"}
{"database":"db_user:db_password@tcp(db_host:db_port)/database?timeout=2s","lvl":"warn","msg":"Config database:","t":"2018-04-01T21:44:34.198145674+08:00"}
{"index":"1","lvl":"crit","msg":"Config index:","t":"2018-04-01T21:44:34.198161022+08:00"}

实例源码

https://github.com/qizheng09/confdemo

你可能感兴趣的:(go)