kratos icon indicating copy to clipboard operation
kratos copied to clipboard

grpc/resolver/discovery/resolver.go中日志关闭问题

Open freezeChen opened this issue 2 years ago • 6 comments

What happened:

#1935 #1942 在上诉issue中,在discovery中新增了DisableDebugLog()对日志输入进行关闭,但discovery.NewBuilder()是在grpc client创建的内部中调用的 if options.discovery != nil { grpcOpts = append(grpcOpts, grpc.WithResolvers( discovery.NewBuilder( options.discovery, discovery.WithInsecure(insecure), ))) } 无法直接在外部对日志进行关闭, 提议在 grpc.DialInsecure()中增加关闭discovery日志的options

What you expected to happen:

How to reproduce it (as minimally and precisely as possible):

Anything else we need to know?:

Environment:

  • Kratos version (use kratos -v): v2.5.0

freezeChen avatar Sep 07 '22 06:09 freezeChen

这个功能,感觉有点怪,不知道开始的时候出于什么考虑加上了 DisableDebugLog()。而且他输出的也不是Debug而是info 用日志的等级去控制不是更好么?使用log.NewFilter 包装一下,或者用第三方的日志都能实现日志关闭的效果。 如果想将框架和业务的日志分开控制等级,直接使用两个日志就可以了

yzrzr avatar Sep 09 '22 06:09 yzrzr

我也觉得用日志等级的方式或者一个全局的debug模式跟release模式(类似于gin中控制框架日志输)用来控制框架中的日志的打印.

freezeChen avatar Sep 11 '22 14:09 freezeChen

遇到了同样的问题,我提了个 PR 帮忙 review 一下 @shenqidebaozi @tonybase

deagon avatar Oct 13 '22 10:10 deagon

线上环境打印大量日志,需要这个特性合入以后将其关闭,请有空帮忙 review 一下,多谢! @haiyux @shenqidebaozi @tonybase

deagon avatar Oct 25 '22 06:10 deagon

这个功能,感觉有点怪,不知道开始的时候出于什么考虑加上了 DisableDebugLog()。而且他输出的也不是Debug而是info 用日志的等级去控制不是更好么?使用log.NewFilter 包装一下,或者用第三方的日志都能实现日志关闭的效果。 如果想将框架和业务的日志分开控制等级,直接使用两个日志就可以了

当时的解法简单粗暴,因为大量日志的来源都是这一行? “[resolver] update instances: %s” 因此只对这一行做了特殊处理。同时还有一个考虑:如果通过调整级别是不是会其他地方的日志产生影响?比如,我需要某些地方的日志但有不需要这个地方的干扰日志。现在看来,那只是个伪需求,orz~

@deagon PR 没有合并前,如果想要先解决问题,试试这样做:

通过提供 grpc.Option

v := []grpc.ClientOption{
		grpc.WithEndpoint("discovery://default/" + AppID),
		// grpc.WithDiscovery(nil),
		grpc.WithBalancerName(p2c.Name),
		grpc.WithMiddleware(middleware.ClientMiddlewareSet()),
		grpc.WithOptions(
			googlegrpc.WithResolvers(
				discovery.NewBuilder(yourDisInstance,  discovery.DisableDebugLog(), discovery.WithInsecure(true)),
			),
		),
	}
	v = append(v, opts...)
	conn, err := grpc.DialInsecure(context.Background(), v...)
	if err != nil {
		return nil, err
	}

另外,PR 的方向是不是可以朝着日志级别 / DEBUG 模式推进?慢慢废弃以前的 option 的控制方式

yeqown avatar Oct 27 '22 02:10 yeqown

@yeqown 多谢回复,解决方案看懂了,之前以为无解才"出此下策"。

更优雅的方式确实是废掉这个 option,转成 logger 传递。

deagon avatar Oct 27 '22 02:10 deagon

https://github.com/go-kratos/kratos/commit/768ffd71d4369b99424458ffbbf287df342a8424

shenqidebaozi avatar Mar 15 '23 16:03 shenqidebaozi