来自 hystrix 命令的日志错误

Posted

技术标签:

【中文标题】来自 hystrix 命令的日志错误【英文标题】:Log errors from hystrix commands 【发布时间】:2015-09-25 06:31:35 【问题描述】:

使用@HystrixCommand 注释可以配置一个回退方法,以防方法失败。

    public Link defaultDogeLink(Account account) 
         return null;
    

    @HystrixCommand(fallbackMethod = "defaultDogeLink")
    public Link buildDogeLink(Account account) 
         // some code that may throw Runtime Exceptions
      

我应该怎么做才能记录(在中心类中)在所有使用 @HystrixCommand 注释的方法中引发的运行时异常?

我使用的是 spring-cloud-netflix 而不是 vanilla hystrix-javanica。 我正在寻找我需要在我的应用程序中实现的类似于 org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler 类(用于 Spring 的 @Async)的东西。

在 hystrix-core 中,HystrixCommand 类有 getFailedExecutionException() 方法,可以在后备方法中用于记录异常。有人可以指出我在使用 hystrix-javanica 时如何得到这个异常吗?

【问题讨论】:

Plain Hystrix 允许您使用 HystrixPlugins.getInstance().registerCommandExecutionHook() 注册 HystrixCommandExecutionHook。我在 Spring 环境中没有这方面的经验,但您可能想尝试一下。 @marius_neo 是对的,@HystrixCommand 是香草hystrix-javanica,现在没有弹簧扩展,所以试试他的建议。 【参考方案1】:

我在 hystrix-javanica 的单元测试中发现了一种获取最后执行的 hystrix 命令的方法:

public Link defaultDogeLink(Account account) 
     LOG.warn("exception occured while building doge link for account " + account, getCommand().getFailedExecutionException());
     return null;


@HystrixCommand(fallbackMethod = "defaultDogeLink")
public Link buildDogeLink(Account account) 
     // some code that may throw Runtime Exceptions
  


private com.netflix.hystrix.HystrixInvokableInfo<?> getCommand() 
    return HystrixRequestLog.getCurrentRequest().getAllExecutedCommands().iterator().next();

它比预期的要冗长一些,但满足我的要求。

【讨论】:

以上是关于来自 hystrix 命令的日志错误的主要内容,如果未能解决你的问题,请参考以下文章

Hystrix 命令对象:新 vs 单例

如何正确处理 Hystrix 回退中的预期错误?

Hystrix请求命令 HystrixCommandHystrixObservableCommand

如何启用 Hystrix DEBUG 级别的日志记录

Spring Boot 中的 Hystrix 仪表板问题

如何说 Hystrix 不会为 Hystrix 命令中的某些异常触发回退