【发布时间】:2017-12-20 15:31:27
【问题描述】:
我尝试像这样处理 rpc 异常
try {
rpcService.invokeRemoteMethod(foo)
} catch (Exception e) {
logger.error("invokeRemoteMethod failed, foo = {} ", foo);
throw CustomException(e);
}
当rpcService不可用的时候,比如timeout,这段sn-p的代码会往文件里写很多stacktrace日志,可能会消耗很多cup和memory。所以我猜能不能设置一些阈值,例如当同一异常每分钟发生一次时,我打印整个异常堆栈,每分钟 10 次,我只打印异常消息,100 次以上,我什么也不记录。
【问题讨论】:
-
不要停下来记录错误!在我的十大最可怕的编程错误中,不记录错误是排名第一的。相反,停止调用远程方法一段时间,或者修复你的实现,或者杀死当前线程,或者以世界上一切美好的名义,永远不要忽略异常。它们在飞机驾驶舱或核电站中处于红色警戒状态,它们是潜在致命疾病的症状,不考虑它们是可怕的,将打破世界并打开通往恶魔领域的大门。最多改变日志的级别......
-
服务平时正常吗?为什么您认为在记录期间需要担心 cpu/内存使用情况?分析器是否指出了问题?
-
@spi 我认为系统可用性比日志记录本身更重要,这就是为什么我们的团队开发了可以动态更新日志级别的有用工具。
-
@AndrewS 您可以说该服务通常不稳定,我们有一个依赖于 100 多个 rpc 服务的 Web 项目。有时 rpc 服务器关闭,这可能会引发很多异常
-
我真的认为处理这种情况的方法可以是任何事情,但要停止记录错误......你真的试图用最糟糕的解决方案来处理问题。这里需要解决的是rpc服务下线的原因,而不是如何不让别人知道。
标签: java exception logging rpc