go语言写日志

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

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

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

-log_dir: 日志文件保存目录

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

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

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

一个简单的例子:

package main

import (
	"flag"
	"fmt"
	"github.com/golang/glog"
	"os"
)

// 避免没有引用fmt的编译错误
var _ = fmt.Println

func main() {
	//初始化命令行参数
	flag.Parse()

	glog.Info("hello, glog")
	glog.Warning("warning glog")
	glog.Error("error glog")

	glog.Infof("info %d", 1)
	glog.Warningf("warning %d", 2)
	glog.Errorf("error %d", 3)

	glog.V(3).Infoln("info with v 3")
	glog.V(2).Infoln("info with v 2")
	glog.V(1).Infoln("info with v 1")
	glog.V(0).Infoln("info with v 0")

	// 退出时调用,确保日志写入文件中
	glog.Flush()
}

有几点说明:
1、高等级的日志会同时输出到比它等级低的文件中,例如error日志会同时输出到error文件,warning文件,info文件中,依次类推;

2、启动时,调用flag.Parse用来初始化glog的参数,例如xxx.exe -log_dir=”./” -v=3。如果不提供参数,log_dir目录为
os.TempDir(),v的值为0

3、程序退出时,需要调用glog.Flush(),将日志写入文件中。

4、V函数。默认的v选项为0,可以通过命令行设置v值。V函数的功能是,当V函数的参数高于glog的v值时,不会执行后续的Info函数,否则就执行。

glog.V(2).Info

相当于

if glog.V(2) {
    Info()
}

V的实现很精彩,有兴趣可以看看源代码。

5、运行示例,假设文件名为f.go

go build f.go
f.exe -log_dir="./" -v=3
f.exe -log_dir="./" -v=2

6、日志文件名

日志文件名由以下几部分组成:

程序名.电脑名.用户名.log.xxx.YYYYMMDD-HHMMSS.pid,其中

xxx为日志等级,例如INFO,ERROR,WARNING

YYYYMMDD为年月日

HHMMSS为小时,分钟,秒

pid是进程id

7、glog.Fatal的默认行为是输出Fatal等级日志,并强制进程退出,不过可以自定义Fatal的行为

8、glog还提供了vmodule这样高级的用法,有兴趣可以研究一下。

glog代码地址:

https://github.com/golang/glog

本文来自:铁哥的博客

感谢作者:铁哥

查看原文:go语言写日志

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。