gRPC内置日志打印功能详解
创作时间:
作者:
@小白创作中心
gRPC内置日志打印功能详解
引用
CSDN
1.
https://blog.csdn.net/qq_41630102/article/details/137561172
本文将介绍如何在gRPC中开启和配置内置日志打印功能。通过环境变量可以控制日志的详细程度和等级,同时还可以将日志输出到文件中,并使用第三方库file-rotatelogs进行日志滚动和大小限制。
一、开启条件
通过查看 gRPC 的内置文件可以看到,日志打印是由环境变量控制的:
export GRPC_GO_LOG_VERBOSITY_LEVEL=99 # 日志详细程度,这里99为最高
export GRPC_GO_LOG_SEVERITY_LEVEL=info # 日志等级,这里为info
如果是用Goland运行的话在运行配置里添加到环境变量那边就行了:
二、日志效果
接着运行之前准备好的程序,可以看到如下日志打印出来(截图不全):
日志里主要包含了一些链接方面的信息,对于以后排查问题会有帮助。
三、记录日志到文件中
gRPC内置日志默认是打印到os.Stderr
中的,在实际使用过程中很不方便。幸运的是,grpclog
有提供设置日志接口用于替换默认的日志写入。这里我们只需要关注两个接口:
// SetLoggerV2 sets logger that is used in grpc to a V2 logger.
// Not mutex-protected, should be called before any gRPC functions.
func SetLoggerV2(l LoggerV2) {
if _, ok := l.(*componentData); ok {
panic("cannot use component logger as grpclog logger")
}
grpclog.Logger = l
grpclog.DepthLogger, _ = l.(grpclog.DepthLoggerV2)
}
// NewLoggerV2 creates a loggerV2 with the provided writers.
// Fatal logs will be written to errorW, warningW, infoW, followed by exit(1).
// Error logs will be written to errorW, warningW and infoW.
// Warning logs will be written to warningW and infoW.
// Info logs will be written to infoW.
func NewLoggerV2(infoW, warningW, errorW io.Writer) LoggerV2 {
return newLoggerV2WithConfig(infoW, warningW, errorW, loggerV2Config{})
}
可以看到,现在只需要调用grpclog.SetLoggerV2()
即可设置自定义日志,入参为用函数grpclog.NewLoggerV2()
创建的grpclog.LoggerV2
接口,而grpclog.NewLoggerV2()
的入参为3个io.Writer
类型的接口,所以我们只需要3个io.Writer
类型的参数就行了。
考虑到日志需要进行滚动、限制大小等操作,使用目前已有的库github.com/lestrrat-go/file-rotatelogs
,但是这个库目前只支持单一对象写入,为了可以写入日志文件,又能在控制台上显示,这边我fork了仓库进行了二次修改,最终地址为github.com/sauryniu/file-rotatelogs
。
具体用法如下所示:
// main.go
package main
import (
rotatelogs "github.com/sauryniu/file-rotatelogs"
"google.golang.org/grpc/grpclog"
"time"
)
func init() {
rpcLogPath := "log/grpc.log"
rpcLogWriter, err := rotatelogs.New(
rpcLogPath+".%Y%m%d", // 日志文件格式
rotatelogs.WithLinkName(rpcLogPath), // 最新日志文件链接名称
rotatelogs.WithRotationTime(time.Hour*24), // 滚动时间,每24小时
rotatelogs.WithMaxAge(time.Hour*24*15), // 日志保存的最长时间,这里是15天
rotatelogs.WithConsole(), // 是否同步打印到控制台
)
if err != nil {
panic(err)
}
grpclog.SetLoggerV2(grpclog.NewLoggerV2(rpcLogWriter, rpcLogWriter, rpcLogWriter))
}
func main() {
go startServer(":8080")
// 确保服务开起来
time.Sleep(time.Second)
clientTest("localhost:8080")
}
最后运行结果:
可以看到,日志已经记录到./log/grpc.log
中了。
本文原文来自CSDN
热门推荐
《赛博朋克2077》:军用科技女主管的实战指南
江西省萍乡市旅游攻略:热门景点推荐与全面攻略介绍
白百合的花语:纯洁、高贵与祝福的象征
天氣轉涼,關節疼痛又卡卡?醫籲:4要訣擺脫天氣造成的關節疼痛
粉色玫瑰花语:从浅粉到深粉的情感密码
冬季宫廷反季花培育的故事
热情如火的爱意——以红玫瑰为花语的表达(红玫瑰花语)
老正兴&国际饭店:秋冬季必打卡的上海美食圣地!
新春打卡:豫园&迪士尼,魔都必玩组合!
冬日探秘:漳州平和灵通岩的雪景奇观
五仙观:广州祖庙背后的千年传奇
广州打卡圣地:五仙观的历史探秘
拼搏的姿态最动人!残奥会上,这一幕幕激励人心
秋冬皮肤瘙痒?胡天雄教你一招搞定!
焦虑症患者的皮肤瘙痒:从日常护理到心理治疗的全面解决方案
皮肤科专家推荐:秋冬科学止痒全攻略
烟台下周出行指南:晴天还是雨夹雪?
《三角洲行动》VS《使命召唤》,谁才是射击王者?
《三角洲行动》最强步枪深度解析:RCX-Spear如何称霸战场?
《三角洲行动》制作人揭秘:大规模战场与生存撤离的完美融合
养马岛:烟台最美海岸线自驾游必打卡!
烟台山太平湾:探寻千年文脉
轮毂变形修复能做到安全吗?为什么
番茄红素:抗衰神器还是过敏源?
每天一个西红柿,降压效果很明显!但这两类不能吃
“三关六码头”携手“宁糕糕”,打造网红小吃新地标!
冬至必打卡!宁波汤圆温暖你的胃
宁波老字号小吃店地图:八家百年老店的美食传奇
糖友福音:游泳&散步控糖大法好
中国营养学会推荐:糖尿病患者的营养餐搭配