golang分级执行日志记录插件库glog的使用
golang分级执行日志记录插件库glog的使用
glog是一个高效的Go语言分级日志记录库,它实现了类似Google内部C++ INFO/ERROR/V日志系统的功能。
基本功能
glog提供了以下日志级别函数:
- Info
- Warning
- Error
- Fatal 以及对应的格式化版本(如Infof、Errorf等)
基本示例
package main
import (
"flag"
"github.com/golang/glog"
)
func main() {
// 必须调用flag.Parse()来解析命令行参数
flag.Parse()
defer glog.Flush() // 确保在程序退出前刷新所有日志
// 基本日志记录
glog.Info("Prepare to repel boarders")
glog.Warning("This is a warning message")
glog.Error("This is an error message")
// 格式化日志
err := "example error"
glog.Fatalf("Initialization failed: %s", err) // Fatal会调用os.Exit(1)
}
V级别日志
glog提供了V级别的日志记录,可以通过-v和-vmodule=file=2标志进行精细控制:
package main
import (
"flag"
"github.com/golang/glog"
)
func main() {
flag.Parse()
defer glog.Flush()
// V级别日志示例
if glog.V(2) {
glog.Info("Starting transaction...") // 只有当-v=2或更高时才会记录
}
// 另一种写法
glog.V(2).Infoln("Processed", 100, "elements")
}
命令行参数
glog支持以下命令行参数来控制日志行为:
-log_dir
: 日志文件目录-v
: 设置V日志级别-vmodule
: 按文件设置V日志级别
完整示例
package main
import (
"flag"
"github.com/golang/glog"
)
func init() {
// 设置日志目录(可选)
flag.Set("log_dir", "./logs")
}
func processItems(n int) {
glog.V(2).Info("Processing items...")
for i := 0; i < n; i++ {
glog.V(3).Infof("Processing item %d", i)
}
glog.V(2).Infof("Processed %d items", n)
}
func main() {
flag.Parse()
defer glog.Flush()
glog.Info("Application starting")
glog.Warning("This is a sample warning")
// 记录不同级别的日志
glog.V(1).Info("Verbose level 1")
glog.V(2).Info("Verbose level 2")
glog.V(3).Info("Verbose level 3")
processItems(5)
glog.Error("Sample error occurred")
glog.Info("Application exiting")
}
注意事项
- 必须调用
flag.Parse()
来解析命令行参数 - 建议使用
defer glog.Flush()
确保日志被正确写入 - 日志文件默认会按日期和进程ID自动轮转
- Fatal级别的日志会调用os.Exit(1)
glog是Google内部使用的日志包的开放源代码版本,功能稳定但不再添加新特性。如需报告问题,可以发送邮件至golang-nuts@googlegroups.com。
更多关于golang分级执行日志记录插件库glog的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang分级执行日志记录插件库glog的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
glog 分级执行日志记录插件库使用指南
glog 是 Google 开发的一个分级日志记录库,提供了不同级别的日志记录功能,适合在 Golang 项目中使用。下面详细介绍 glog 的使用方法。
安装 glog
首先需要安装 glog 库:
go get github.com/golang/glog
基本使用方法
package main
import (
"flag"
"github.com/golang/glog"
)
func main() {
// 必须调用 flag.Parse() 来解析命令行参数
flag.Parse()
defer glog.Flush() // 确保在程序退出前刷新所有日志
glog.Info("这是一条普通信息日志")
glog.Infof("这是一条带格式的信息日志: %s", "format example")
glog.Warning("这是一条警告日志")
glog.Warningf("这是一条带格式的警告日志: %d", 404)
glog.Error("这是一条错误日志")
glog.Errorf("这是一条带格式的错误日志: %v", "something wrong")
glog.V(1).Info("这是一条详细级别1的日志")
glog.V(2).Infof("这是一条详细级别2的带格式日志: %t", true)
// 致命日志会调用 os.Exit(1)
// glog.Fatal("这是一条致命错误日志")
// glog.Fatalf("这是一条带格式的致命错误日志: %f", 3.14)
}
日志级别
glog 提供了以下几种日志级别:
- Info - 普通信息日志
- Warning - 警告日志
- Error - 错误日志
- Fatal - 致命错误日志(会终止程序)
- V(level) - 详细级别日志(可自定义级别)
命令行参数
glog 提供了一些命令行参数来控制日志行为:
-log_dir
- 指定日志文件目录(默认为空,输出到标准错误)-alsologtostderr
- 同时输出日志到标准错误和文件-stderrthreshold
- 设置输出到标准错误的日志级别(INFO/WARNING/ERROR/FATAL)-v
- 设置 V 日志的级别-vmodule
- 按模块设置 V 日志级别
示例运行命令:
go run main.go -log_dir=./logs -alsologtostderr -v=2
高级用法
按模块设置日志级别
package main
import (
"flag"
"github.com/golang/glog"
)
func module1() {
glog.V(1).Info("Module 1 - V1")
glog.V(2).Info("Module 1 - V2")
}
func module2() {
glog.V(1).Info("Module 2 - V1")
glog.V(2).Info("Module 2 - V2")
}
func main() {
flag.Parse()
defer glog.Flush()
// 运行时可使用 -vmodule=module1=2,module2=1 来设置不同模块的日志级别
module1()
module2()
}
自定义日志格式
package main
import (
"flag"
"fmt"
"github.com/golang/glog"
"time"
)
type customLogger struct{}
func (l *customLogger) Write(data []byte) (n int, err error) {
// 自定义日志格式
msg := fmt.Sprintf("[%s] %s", time.Now().Format("2006-01-02 15:04:05"), string(data))
return glog.InfoDepth(1, msg)
}
func main() {
flag.Parse()
defer glog.Flush()
// 设置自定义日志输出
glog.SetOutput(&customLogger{})
glog.Info("这条日志将使用自定义格式")
}
最佳实践
- 始终调用 flag.Parse() - 必须在 main 函数开始时调用 flag.Parse()
- 使用 defer glog.Flush() - 确保程序退出前所有日志都被刷新
- 合理使用日志级别 - 不要滥用高日志级别
- 生产环境配置 - 在生产环境中配置 -log_dir 将日志输出到文件
- 避免频繁的 V 日志 - 高频率的详细日志可能影响性能
与标准库 log 的对比
- 分级日志 - glog 提供多级别日志,标准库 log 只有单一级别
- 文件输出 - glog 支持自动日志文件分割和滚动
- 性能优化 - glog 在日志量大的情况下性能更好
- 线程安全 - glog 是线程安全的,适合并发环境
glog 是一个功能强大且高效的日志库,特别适合大型项目或需要精细控制日志级别的场景。