glang 日志解析glog

glog

go语言有一个标准库,log,提供了最基本的日志功能,但是没有什么高级的功能,如果需要高级的特性,可以选择glog或log4go,K8s默认的日志输出就是用的glog。

glog是google提供的,类似于google的c++ log库,使用起来非常简单,下面介绍一下;log4go的用法和log4j一样,可配置性比较高。

日志输出格式是固定的(Lmmdd hh:mm:ss.uuuuuu threadid file:line] msg…)

1
程序名.电脑名.用户名.log.xxx.YYYYMMDD-HHMMSS.pid

glog只提供了少数几个选项,通过命令行控制,例如:

-log_dir: 日志文件保存目录

-alsologtostderr: 日志写入文件的同时,输出到stderr

-v:配置V输出的等级。

glog使用非常简单,只需要import就可以了。glog package的init函数会初始化并启动一个glog 的flushDaemon协程,你只需要使用glog.Info, glog.Warning, glog.Error或glog.Fatal即可。

安装

1
go get github.com/golang/glog

文档

1
https://godoc.org/github.com/golang/glog

日志级别

  • INFO:普通日志;
  • WARNING:告警日志;
  • ERROR:错误日志;
  • FATAL:严重错误日志,打印完日志后程序将会推出 os.Exit()

使用方式参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
glog.Info("Prepare to repel boarders")

glog.Fatalf("Initialization failed: %s", err)

defer glog.Flush()

glog.Info("This is info message")
glog.Infof("This is info message: %v", 12345)
glog.InfoDepth(1, "This is info message", 12345)

glog.Warning("This is warning message")
glog.Warningf("This is warning message: %v", 12345)
glog.WarningDepth(1, "This is warning message", 12345)

glog.Error("This is error message")
glog.Errorf("This is error message: %v", 12345)
glog.ErrorDepth(1, "This is error message", 12345)

glog.Fatal("This is fatal message")
glog.Fatalf("This is fatal message: %v", 12345)
glog.FatalDepth(1, "This is fatal message", 12345)

日志级别
使用日志级别,在程序运行时可以使用-v=5打印这个级别以下定义的日志输出 -alsologtostderr 是将日志同时输出到控制台。

1
2
3
4
5

glog.V(3).Info("LEVEL 3 message") // 使用日志级别 3
glog.V(4).Info("LEVEL 4 message") // 使用日志级别 4
glog.V(5).Info("LEVEL 5 message") // 使用日志级别 5
glog.V(8).Info("LEVEL 8 message") // 使用日志级别 8

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package main

import (
"encoding/json"
"flag"
"github.com/golang/glog"
"io/ioutil"
)

type ConfigData struct {
ServerID uint8
ServerPort int32
}


func (conf *ConfigData) LoadFromFile(file string) (err error) {

configJSON, err := ioutil.ReadFile(file)

if err != nil {
return
}
err = json.Unmarshal(configJSON, conf)

return
}

func main(){

//程序退出时确保写入文件中
defer glog.Flush()

configFilePath := flag.String("config", "./config.json", "Path of config file")
flag.Parse()

if flag.NFlag() < 1 { //NFlag返回解析时进行了设置的flag的数量。
flag.Usage() //当参数小于1个打印flag的默认提示
return
}
// 读取配置文件
var configData ConfigData
err := configData.LoadFromFile(*configFilePath)

if err != nil {
glog.Fatal("加载配置文件失败: ", err)
return
}

glog.Info("配置加载正确")
glog.Info("程序开始启动>>>>>>>>>>")
fmt.Println(configData.ServerID,configData.ServerPort)

}

运行

会在log文件下生成

1
GoLogMain.exe -config="./config.json" -log_dir="./log" -alsologtostderr