Golang中glog库的使用方法

马谦马谦马谦 2019年9月8日19:06:34 发表评论

一、关于glog库

golang中的glog库是google著名开源C++日志库glog的golang版本,在golang默认日志库的基础上做了更进一层的封装使得该库能更贴近日常使用。项目首页为golang/glog,当前版本的glog有以下几个特点:

  1. 支持四种日志级别:INFO < WARNING < ERROR < FATAL,支持不同级别的日志打印到不同文件中。
  2. 默认情况下日志不是打印到标准输出或标准错误,需要手动添加参数才能把日志打到标准错误中。
  3. 支持根据文件大小来切割文件,但是不支持根据日期切割。
  4. 日志输出的格式固定且不可修改:Lmmdd hh:mm:ss.uuuuuu threadid file:line] msg,其中L表示日志级别首字符,如Info日志,L打印出来是ID`。
  5. 源码实现简单,方便自主修改。

安装glog:

1.1 基本用法

glog依赖命令行参数输入,默认是打印到文件的,在使用该库前必须先使用flag包解析命令行参数:

因为glog底层实现是先把日志输入到缓冲区buffer中,然后定时写入文件,所以在执行完日志输出后要手动执行glog.Flush()确保日志刷新到文件。一般在函数开始处执行:

输出日志时,需要加上-log_dir参数以指定目录写入日志文件,如以下代码:

编译后执行:

在log目录下会生成相应的日志文件,查看对应的日志:

Golang中glog库的使用方法

打印到标准输出

默认情况下,日志不是打印到标准输出中,如需打印到标准输出可以使用以下两个参数:

  1. logtostderr:打印到标准错误而不是文件。
  2. alsologtostderr:同时打印到标准错误。

这两个参数都会把日志打印到标准错误中(在linux终端环境下,前台显示的标准错误和标准输出可以认为是同一个输出),调试日志时可以加上这两个参数中的任一:

Golang中glog库的使用方法

二、日志级别

v levelv module功能是最常用到的功能,适用于给同一套代码在不同环境下设置不同日志级别的功能。如在调试环境下打印出更多级别的日志,生产环境下打印更少的日志。

2.1 打印特定级别的日志

使用方法:

其中n表示的是日志级别,当n小于等于设定日志级别时将会被打印。默认情况下日志级别时0,启动时通过-v=x参数设定日志级别。如在代码中分别以级别3和级别5打印两条日志:

执行时设定日志级别为4,日志将不会打印出第二条级别为5的日志:

日志:

2.2 vmodule选项

vmodule选项可以在上面设定v level之后,单独再给某个文件设置日志级别,适用于以下场景:

  • 系统默认日志级别为3,但是希望main.go中的日志级别为5

执行:./glog -v=4 -log_dir=log -vmodule=main=5,日志中将会打印出级别为5的日志:

三、自定义修改

3.1 修改日志WARN为DEBUG

默认是没有DEBUG日志的,WARN日志用得少可以把WARN日志改成DEBUG。在glog.go源码文件中,修改以下内容:

这里实现简单,改起来也简单。

3.2 默认打印到标准错误

本文共执行44次查询,耗时0.296秒!
马谦马谦马谦

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: