Golang 中 glog 库的使用方法

马谦马谦马谦 Golang评论3,579字数 1605阅读 5 分 21 秒阅读模式

一、关于 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

打印到标准输出

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

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

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

Golang中glog库的使用方法-图片2

二、日志级别

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 默认打印到标准错误

 
马谦马谦马谦
  • 本文由 马谦马谦马谦 发表于 2019 年 9 月 8 日 19:06:34
  • 转载请务必保留本文链接:https://www.dyxmq.cn/program/code/golang/the-usage-of-glog-in-golang.html
解决gvm工具无法下载安装包的问题 Golang

解决 gvm 工具无法下载安装包的问题

GVM(Go Version Manager) 是一款用于管理和切换不同 Go 语言版本的工具。它允许用户在同一台计算机上轻松安装、使用和管理多个 Go 版本,同时还能确保项目之间的依赖关系井然有序。 GVM 的主...
goland配置proto文件搜索路径 Golang

goland 配置 proto 文件搜索路径

默认情况下,goland(jetbrains 家的软件:idea 、 pycharm 、 phpstorm 以及 webstorm 都是一样) 安装 protobuf 插件后只会在一个特定的库路径下搜索 proto 文件。如果...
国内几个优质的Go Module代理仓库服务 Golang

国内几个优质的 Go Module 代理仓库服务

一、简介 go module 公共代理仓库,代理并缓存 go 模块。你可以利用该代理来避免 DNS 污染导致的模块拉取缓慢或失败的问题,加速你的构建。 简单来说就是国内访问被墙,go get 无法在线获取到仓库,...
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
确定

拖动滑块以完成验证