【grpc】三、grpc入门,内置日志打印

一、开启条件

通过查看 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中了。

相关推荐

  1. grpcgrpc进阶,服务发现

    2024-04-09 23:52:01       33 阅读
  2. gRPCgRPC Middleware

    2024-04-09 23:52:01       45 阅读
  3. 【Go】五、Grpc入门使用

    2024-04-09 23:52:01       38 阅读
  4. .NET gRPC

    2024-04-09 23:52:01       60 阅读
  5. grpc笔记

    2024-04-09 23:52:01       31 阅读
  6. go的grpc种流模式通信

    2024-04-09 23:52:01       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-09 23:52:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-09 23:52:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-09 23:52:01       82 阅读
  4. Python语言-面向对象

    2024-04-09 23:52:01       91 阅读

热门阅读

  1. 2024.4.7力扣每日一题——王位继承顺序

    2024-04-09 23:52:01       39 阅读
  2. python--异常处理

    2024-04-09 23:52:01       41 阅读
  3. QB/T 4464-2013 家具用蜂窝板检测

    2024-04-09 23:52:01       34 阅读
  4. vue3基础: 组件注册

    2024-04-09 23:52:01       35 阅读
  5. 微信小程序第六次课(模块化和绑定事件)

    2024-04-09 23:52:01       35 阅读
  6. 题目 2915: 接水问题

    2024-04-09 23:52:01       38 阅读
  7. GDB调试概述

    2024-04-09 23:52:01       32 阅读
  8. 题目 2016: 新生的入队仪式

    2024-04-09 23:52:01       30 阅读
  9. 三月已过,春招进度堪忧

    2024-04-09 23:52:01       28 阅读
  10. 并查集(基础+带权以及可撤销并查集后期更新)

    2024-04-09 23:52:01       35 阅读