Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于 chimee 的 log 和 errorHandler 的问题 #1

Closed
toxic-johann opened this issue Jul 11, 2017 · 4 comments
Closed

关于 chimee 的 log 和 errorHandler 的问题 #1

toxic-johann opened this issue Jul 11, 2017 · 4 comments
Labels

Comments

@toxic-johann
Copy link
Member

现阶段在 chimee 中对错误处理和日志输出的控制并不一致。

错误处理

在 chimee 代码中运行时的错误会统一通过 chimee.__throwError 抛出。

若果用户配置了 errorHandler,则错误将会交由 errorHandler 作处理。

若用户设置 slienttrue,则不会抛出错误。

否则,抛出错误。

而当初为了实现

用户可以对不同实例作不同错误处理

该配置设计为静态配置和每个实例的单独配置。

如果用户在实例上有单独配置,则执行实例配置,否则使用全局配置。

日志输出

日志输出采用 chimee-helper-log,该配置为一全局配置。一旦设置,所有实例均采用同样的配置。

问题

在此种情况下,错误处理和日志输出不一致,容易产生误解。一般而言,会将错误输出和日志输出尽可能的统一。

如当我设置 silent时,不希望有任何的错误和日志输出。

当我针对某个实例进行 debug 时,我希望仅输出该实例的错误和日志。

解决方案

1. 将日志输出业绑定到单个实例上

满足所有需求

此改动将会有较多的代码需要更改,并且需要下层尽量将错误或者日志上交分发层。

2. 日志和错误配置均采用全局制,错误处理函数允许单个实例配置

将所有配置都收归全局,视作默认配置不应该按照实例配置。

而错误处理函数因为自定义程度较高,可以容许用户使用。

改动较少,策略中庸。

逻辑上稍显奇怪

3. 所有错误处理和日志输出均全局统一配置

维护轻松

不能满足所谓“多实例”的需求

讨论要点

  1. 希望大家可以提出更好的方案,并最好是日后较少更改、更好维护的方案,而非临时救火方法。
  2. 希望大家可以列出需求场景
  3. 考虑到多实例的状况和调试需求
  4. 可以的话,�考虑下相应编译前优化方案
@huzunjie
Copy link
Member

错误处理
在 chimee 代码中运行时的错误会统一通过 chimee.__throwError 抛出。
若果用户配置了 errorHandler,则错误将会交由 errorHandler 作处理。
若用户设置 slient为true,则不会抛出错误。
否则,抛出错误。
目前的错误处理机制,对chimee底层逻辑开发的要求会更严格。

对于日后的维护,异常类型细分并具体到实例上,会更加可控+偏向“一劳永逸”;用户确实需要感知到时哪个实例、出现了什么问题,才能更快的定位解决。

如果底层的实现中能遵从这个设计最好,否则这个设计本身可能会形同虚设。

@toxic-johann
Copy link
Member Author

@huzunjie 现在 kernel 层的运行时错误会通过 error 事件抛出。 dispatcher 已自动监听相应错误。现在对于错误开发的问题不大~

现在主要问题是 log 是否也需要走相应机制。

@songguangyu
Copy link
Member

我觉得log一般是为开发人员调试使用的,没有哪个开发会开10个实例来看log日志吧。
error能为业务方进行打点、错误处理等使用,比如在直播 error时候 需要reload 当前实例的资源,所以error有强需求绑定在实例上。

@toxic-johann
Copy link
Member Author

@songguangyu 如果这么考虑的话。那我会偏向于采取第二种方案,就是只有 errorHandler 是单绑在实例上。其他都是一种全局配置。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants