sofa-boot icon indicating copy to clipboard operation
sofa-boot copied to clipboard

适合新手的任务列表,欢迎认领

Open alaneuler opened this issue 3 years ago • 26 comments

  • [x] [ASSIGNED] SOFABoot 发布服务时 增加 interfaceType 校验。见 https://github.com/sofastack/sofa-boot/issues/851
  • [x] [ASSIGNED] 为 SOFABoo t增加 SOFA tracer 插件,见 https://github.com/sofastack/sofa-boot/issues/847
  • [x] [CLOSED] SOFA 健康检查日志中加入当前检查进度,见 https://github.com/sofastack/sofa-boot/issues/837
  • [x] [ASSIGNED] 支持单独配置终端日志级别 见 https://github.com/sofastack/sofa-common-tools/issues/134
  • [ ] [ASSIGNED] 设计实现一个新的配置项,用于判断 SOFABoot 是否由 IDE 启动。见 https://github.com/sofastack/sofa-boot/issues/861

申请人条件不限,申请的话可以在留言里简单说下自己的设计~

alaneuler avatar Jun 25 '21 03:06 alaneuler

您好,我想试试第一个任务: SOFA 健康检查日志中加入当前检查进度

我是这样想的,改造HealthCheckerProcessor

  1. 在健康检查开始前,根据HealthChecker集合,打印待检查项
  2. 在调用HealthChecker.isHealthy方法时,利用CountDownLatch提供超时机制(超时时间提供默认值,支持配置)
  3. 在调用具体组件的健康检查前后增加日志输出:xxx检查开始 xxx检查完成

it-linnan avatar Jun 26 '21 07:06 it-linnan

@it-linnan 好的,欢迎欢迎~

  1. 第一点可能还不够,SOFA 的健康检查除了 HealthChecker 还包括 HealthIndicator 的检查
  2. 同样,还需要考虑 HealthIndicator 的

可以在 issue 下面发下你的 PR,我们来 review~

alaneuler avatar Jun 28 '21 02:06 alaneuler

您好,我想试试第一个任务: SOFA 健康检查日志中加入当前检查进度

我是这样想的,改造HealthCheckerProcessor

  1. 在健康检查开始前,根据HealthChecker集合,打印待检查项
  2. 在调用HealthChecker.isHealthy方法时,利用CountDownLatch提供超时机制(超时时间提供默认值,支持配置)
  3. 在调用具体组件的健康检查前后增加日志输出:xxx检查开始 xxx检查完成

@alaneuler 说你思路很好~如果确定要做的话,我们把第一个issue assign给你?

seeflood avatar Jun 28 '21 02:06 seeflood

您好,我想试试第一个任务: SOFA 健康检查日志中加入当前检查进度 我是这样想的,改造HealthCheckerProcessor

  1. 在健康检查开始前,根据HealthChecker集合,打印待检查项
  2. 在调用HealthChecker.isHealthy方法时,利用CountDownLatch提供超时机制(超时时间提供默认值,支持配置)
  3. 在调用具体组件的健康检查前后增加日志输出:xxx检查开始 xxx检查完成

@alaneuler 说你思路很好~如果确定要做的话,我们把第一个issue assign给你?

好的,确定要做,分配给我吧。

it-linnan avatar Jun 28 '21 04:06 it-linnan

2.支持单独配置终端日志级别

这个可以通过LoggerContext获取到对应的logger之后通过setLevel可以直接设置,但是有以下注意点:

  • 设置日志级别的时候要兼容log4j与logback,两者的日志级别都要设置
  • 设置时需要注意有三个地方都有console的配置,分别是log-conf.xml、sofa.middleware.log.console.level、sofa.middleware.log.{space id}.console.level,要注意配置顺序来确定最终生效的console日志级别

dkisser avatar Jul 06 '21 12:07 dkisser

我想认领第二个任务

dkisser avatar Jul 08 '21 08:07 dkisser

我想认领第二个任务

棒!@dkisser 请在 #134 里回复下哈,我们好assign给你

seeflood avatar Jul 08 '21 08:07 seeflood

2.支持单独配置终端日志级别

这个可以通过LoggerContext获取到对应的logger之后通过setLevel可以直接设置,但是有以下注意点:

  • 设置日志级别的时候要兼容log4j与logback,两者的日志级别都要设置
  • 设置时需要注意有三个地方都有console的配置,分别是log-conf.xml、sofa.middleware.log.console.level、sofa.middleware.log.{space id}.console.level,要注意配置顺序来确定最终生效的console日志级别

这里不能使用 logger 的 setLevel 哈~

  1. 一个 logger 的下面会有多个 appender,sofa 是通过添加一个 console appender 使得日志可以自动同时输出到终端。
  2. 得单独配置 appender 的级别,使得同一个 logger 的不同 appender 有不同的级别
  3. 配置的话,不需要考虑 log-conf.xml,因为这个 console appender 是 sofa 自动添加的

其他的思考的很棒,可以根据上面的建议再提一下~

alaneuler avatar Jul 08 '21 08:07 alaneuler

@it-linnan Hi, are you still working on it?

alaneuler avatar Aug 12 '21 03:08 alaneuler

@it-linnan Hi, are you still working on it?

您好,我已经提交了PR,等待review呢 Improve HealthCheck: add progress and timeout.(#837)

it-linnan avatar Aug 13 '21 02:08 it-linnan

2.支持单独配置终端日志级别 这个可以通过LoggerContext获取到对应的logger之后通过setLevel可以直接设置,但是有以下注意点:

  • 设置日志级别的时候要兼容log4j与logback,两者的日志级别都要设置
  • 设置时需要注意有三个地方都有console的配置,分别是log-conf.xml、sofa.middleware.log.console.level、sofa.middleware.log.{space id}.console.level,要注意配置顺序来确定最终生效的console日志级别

这里不能使用 logger 的 setLevel 哈~

  1. 一个 logger 的下面会有多个 appender,sofa 是通过添加一个 console appender 使得日志可以自动同时输出到终端。
  2. 得单独配置 appender 的级别,使得同一个 logger 的不同 appender 有不同的级别
  3. 配置的话,不需要考虑 log-conf.xml,因为这个 console appender 是 sofa 自动添加的

其他的思考的很棒,可以根据上面的建议再提一下~

consoleAppender大致的初始化流程: consoleAppender的初始化发生在AbstractLoggerSpaceFactory的子类(Log4j2LoggerSpaceFactory和LogbakLoggerSpaceFactory)的初始化过程中,AbstractLoggerSpaceFactoryBuilder在调用build()后会将所有需要consoleAppender的logger的loggerName记录到CommonLoggingConfigurations#loggerConsoleWhiteSet。然后在AbstractLoggerSpaceFactory子类的构造函数中判断是否需要将appender加入到logger中。

我的方案: 在AbstractLoggerSpaceFactory创建consoleAppender时通过ConsoleAppender.Builder#setTarget即可改变console的日志登记

疑问: 目前所有logger共有一个consoleAppender,若是直接调整日志级别,则其它logger也会受到影响。是否可以根据不同的logger来创建不同的consoleAppender并缓存以解决此问题?

dkisser avatar Aug 13 '21 07:08 dkisser

@dkisser setTarget 只是设置输出到 stdout 还是 stderr,并不能改 level 的吧。

可以往这两个方向看看:

  • appender filer.
  • AppenderControl is also applicable in log4j2.

你的疑问是对的,每个 logger 都需要一个 console appender,不能共用一个了。

alaneuler avatar Aug 13 '21 09:08 alaneuler

@dkisser setTarget 只是设置输出到 stdout 还是 stderr,并不能改 level 的吧。

可以往这两个方向看看:

  • appender filer.
  • AppenderControl is also applicable in log4j2.

你的疑问是对的,每个 logger 都需要一个 console appender,不能共用一个了。

处理思路清晰了,Log4j2可以在创建Appender的时候调用ApeenderBuilder#setFilter,手动给他创建一个ThresholdMatchFilter,通过filter来过滤日志。logback也是类似的,在创建appender的时候通过Appender#addFilter来添加filter。现在我可以领取这个任务了吗?

dkisser avatar Aug 14 '21 02:08 dkisser

@dkisser 可以的 @seeflood 第二个任务可以分配给 @dkisser 啦~

alaneuler avatar Aug 20 '21 06:08 alaneuler

增加了两个新任务:

  • SOFABoot 发布服务时 增加 interfaceType 校验。见https://github.com/sofastack/sofa-boot/issues/851
  • 为SOFA Boot增加SOFA tracer插件,见https://github.com/sofastack/sofa-boot/issues/847

seeflood avatar Aug 20 '21 07:08 seeflood

我想认领“SOFABoot 发布服务时 增加 interfaceType 校验”这个任务。 思路:

  • API发布服务: 现在ServiceClientImpl的service方法中,只检验InterfaceType非空和binding type。 增加检验instance是否实现了InterfaceType定义的接口。 代码位置:ServiceClientImpl, ServiceComponent
  • xml发布服务: 代码位置:ServiceFactoryBean
  • 注解发布服务: 代码位置:ServiceBeanFactoryPostProcessor

keleqnma avatar Aug 20 '21 09:08 keleqnma

@alaneuler 看下哈

seeflood avatar Aug 20 '21 09:08 seeflood

我想认领“SOFABoot 发布服务时 增加 interfaceType 校验”这个任务。 思路:

  • API发布服务: 现在ServiceClientImpl的service方法中,只检验InterfaceType非空和binding type。 增加检验instance是否实现了InterfaceType定义的接口。 代码位置:ServiceClientImpl、ServiceComponent
  • xml发布服务:
  • 注解发布服务:

嗯嗯,这个思路是 OK 的,但是可以提炼到 ServiceComponent 级别吗? 此外,关于校验开关配置有想法吗?

alaneuler avatar Aug 20 '21 09:08 alaneuler

我想认领 “为SOFA Boot增加SOFA tracer插件” 这个任务 tracer相关类: AbstractSofaTracerStatisticReporter ---执行具体的上报动作 AbstractDigestSpanEncoder ---存储要上报的内容 AbstractClientTracer聚合上述两个类,通过clientSend和clientRecieve来执行具体的发送与接受动作

思路 对于Kafka、Rocket、Rabbit、Redis、Mongo这些中间件,Spring均提供了模板类,我们可以通过代理这些模板类(如:redisTemplate、kafkaTemplate等),通过代理它的execute方法,在execute方法前后通过AbstractClientTracer的clientSend和clientRecieve来完成埋点操作,大体思路和RestTemplate的拦截类似,但不同的是我们需要手动得去实现拦截,而不能借用interceptor(暂时不确定各个模板类是否都有interceptor机制,对于有的可以和RestTemplate一样,通过interceptor实现。对于没有就只能自己编写代理类来拦截,也可以通过spring的AOP来实现)

dkisser avatar Aug 20 '21 11:08 dkisser

我想认领“SOFABoot 发布服务时 增加 interfaceType 校验”这个任务。 思路:

  • API发布服务: 现在ServiceClientImpl的service方法中,只检验InterfaceType非空和binding type。 增加检验instance是否实现了InterfaceType定义的接口。 代码位置:ServiceClientImpl、ServiceComponent
  • xml发布服务:
  • 注解发布服务:

嗯嗯,这个思路是 OK 的,但是可以提炼到 ServiceComponent 级别吗? 此外,关于校验开关配置有想法吗?

  • 校验开关配置: 参照ModuleHealthChecker的配置实现,在SofaBootConstants里添加两个值:SOFABOOT_COMPONENT_CHECK_INTERFACE_TYPE_DEFAULT_ENABLED=false SOFABOOT_COMPONENT_CHECK_INTERFACE_TYPE_ENABLED= "com.alipay.sofa.healthcheck.component.check.interfacetype.enabled“ 或者,复用健康检查的strictcheck的值也可以(但感觉会有些混淆)

  • ServiceComponent内部: 添加私有值interfaceTypeCheck,用@Value注解注入 ServiceComponent内部的isHealthy方法,如果interfaceTypeCheck为真,则调用内部service的instance和interfaceType进行校验

keleqnma avatar Aug 20 '21 17:08 keleqnma

@keleqnma 思路可以的,有一点我提示一下:三个地方的服务发布,最终都是 new 一个 ServiceImpl 对象,该对象会持有 target(也即是 bean)和 interfaceType。

关于开关的话,可以新建一个,不用复用之前的了~

issue 中回复下,我 assign 给你。

alaneuler avatar Aug 21 '21 05:08 alaneuler

我想认领 “为SOFA Boot增加SOFA tracer插件” 这个任务 tracer相关类: AbstractSofaTracerStatisticReporter ---执行具体的上报动作 AbstractDigestSpanEncoder ---存储要上报的内容 AbstractClientTracer聚合上述两个类,通过clientSend和clientRecieve来执行具体的发送与接受动作

思路 对于Kafka、Rocket、Rabbit、Redis、Mongo这些中间件,Spring均提供了模板类,我们可以通过代理这些模板类(如:redisTemplate、kafkaTemplate等),通过代理它的execute方法,在execute方法前后通过AbstractClientTracer的clientSend和clientRecieve来完成埋点操作,大体思路和RestTemplate的拦截类似,但不同的是我们需要手动得去实现拦截,而不能借用interceptor(暂时不确定各个模板类是否都有interceptor机制,对于有的可以和RestTemplate一样,通过interceptor实现。对于没有就只能自己编写代理类来拦截,也可以通过spring的AOP来实现)

不是这个意思哈,trace 的埋点 SOFATracer 均已完成,现在是需要在 SOFABoot 中增加自动配置。

alaneuler avatar Aug 21 '21 05:08 alaneuler

您好,我想认领“为SOFA Boot增加SOFA tracer插件“

  1. 参考sofa-tracer项目,将各plugin对应的BeanPostProcessor同步到sofa-boot中;
  2. 为plugin增加对应的自动配置类,自动配置启用条件是属性开关(enabled)不是false,且项目中引用了相关依赖。

it-linnan avatar Aug 23 '21 01:08 it-linnan

我想认领 “为SOFA Boot增加SOFA tracer插件” 这个任务 tracer相关类: AbstractSofaTracerStatisticReporter ---执行具体的上报动作 AbstractDigestSpanEncoder ---存储要上报的内容 AbstractClientTracer聚合上述两个类,通过clientSend和clientRecieve来执行具体的发送与接受动作 思路 对于Kafka、Rocket、Rabbit、Redis、Mongo这些中间件,Spring均提供了模板类,我们可以通过代理这些模板类(如:redisTemplate、kafkaTemplate等),通过代理它的execute方法,在execute方法前后通过AbstractClientTracer的clientSend和clientRecieve来完成埋点操作,大体思路和RestTemplate的拦截类似,但不同的是我们需要手动得去实现拦截,而不能借用interceptor(暂时不确定各个模板类是否都有interceptor机制,对于有的可以和RestTemplate一样,通过interceptor实现。对于没有就只能自己编写代理类来拦截,也可以通过spring的AOP来实现)

不是这个意思哈,trace 的埋点 SOFATracer 均已完成,现在是需要在 SOFABoot 中增加自动配置。

sofa-tracer下的tracer-sofa-boot-starter模块已有相关Auto configuration,这边应该不用再集成了吧

dkisser avatar Aug 23 '21 02:08 dkisser

2. 为plugin增加对应的自动配置类,自动配置启用条件是属性开关(enabled)不是false,且项目中引用了相关依赖。

这个思路是对的,BPP 可以不用同步,还是放在 SOFATracer 中吧~

alaneuler avatar Aug 23 '21 05:08 alaneuler

@dkisser 需要的,虽然埋点已经完成,但是自动化的配置是没有的,需要让用户低成本使用。

alaneuler avatar Aug 23 '21 05:08 alaneuler