欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Golang: glog 的使用

程序员文章站 2022-03-20 13:29:20
...

基本用法

  1. 创建 test.go 
    package main
    
    import "github.com/golang/glog"
    
    func main() {
            glog.Info("Testing glog.")
            glog.Flush()
    }
    
  2. 运行
    go run test.go
  3. 检查 /tmp 目录,出现了两个新的文件
    ll /tmp/
    total 4
    -rw-r--r--. 1 root root 264 Jan 18 13:29 test.{host}.{user}.log.INFO.{date}
    lrwxrwxrwx. 1 root root  64 Jan 18 13:29 test.INFO -> test.{host}.{user}.log.INFO.{date}
  4. 查看 test.INFO 的内容
    Log file created at: {date}
    Running on machine: {host}
    Binary: Built with gc go1.9 for linux/amd64
    Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
    I0118 13:29:20.878522   16625 test.go:6] Testing glog.

log 等级

基本的 log 等级分为4类:Info, Warning, Error, Fatal.

Flush

log 产生后,会暂存在内存的buffer中。只有显示的调用 glog.Flush(), 数据才会真正被写入文件。glog package 的 init 函数中启动了一个 go routine 用来周期性的调用 glog.Flush() 来保证数据被写入文件, 默认的 Flush 周期为30 秒。

当程序运行至 glog.Fatal() 时, glog package 中保证了在退出前程序前会将所有缓存中的log写入文件。但是对于 Info, Warning 以及 Error, 如果程序正常退出,那么在程序退出前 30 秒的 log 就会丢失。defer 可以被用来防止这种情况的发生。

package main

import "github.com/golang/glog"

func main() {
        defer glog.Flush()

        glog.Info("Testing glog.")
}


参考文献

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