Golang语言--glog日志库使用
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即可。
一个简单的例子:
有几点说明: 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
- [linux][kernel]dump kmsg到文件系统中
- [接口测试 - 基础篇] 12 还是要掌握python日志管理模块的
- Spring整合Quartz分布式调度
- [接口测试 - 基础篇] 11 掌握下python解析YAML格式也是需要的
- 如何用Python创建眼下火爆的区块链?这篇干货请收藏
- [接口测试 - 基础篇] 10 别啊,还有INI格式呢,别忘记我
- [接口测试 - 基础篇] 09 其实吧,读写csv格式也是要掌握的
- 【源码分享】机器学习之Python支持向量机
- [接口测试 - 基础篇] 08 封装个基本的excel解析类
- 关关的刷题日记10——Leetcode 1. Two Sum 方法1
- BZOJ 2463: [中山市选2009]谁能赢呢?(新生必做的水题)
- 10个Python面试常问的问题
- 关关的刷题日记11——Leetcode 1. Two Sum 方法2、3
- 计蒜客:百度的科学计算器(简单)【python神解】
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【玩转Redis面试第1讲】Redis数据结构和常用命令速记
- SSM 单体框架 - 教育平台后台管理系统:课程模块
- 【玩转Redis面试第2讲】面试官再问Redis事务把这篇文章扔给他
- SSM 单体框架 - 教育平台后台管理系统:Maven 进阶使用
- SSM 单体框架 - 教育平台后台管理系统:广告和用户模块开发
- 杀死进程
- SSM 单体框架 - 教育平台后台管理系统:权限模块开发
- 版本控制系统 - GIT
- Spring Cloud Gateway 读取、修改请求体(解决request body内容被截断)
- SimpleTuning
- Nginx 配置
- 深入浅析内存
- 柔性多态
- mysql8.0新特性--隐藏索引
- Python中 5 种不同的下划线含义你都知道吗?