异常处理

ClownFish会在以下场景中自动记录异常日志

  • 处理HTTP请求过程中(HttpAction)
  • 处理消息过程中(MessageHandler)
  • 后台任务中(BackgroundTask)

所以,绝大多数情况下是不需要捕获异常的。





将异常输出到控制台

在某些场景下如果需要小范围的进行异常处理,尤其是涉及 将异常输出到控制台时
那么建议使用下面的做法:

try{
    //.....
}
catch(Exception ex){
    Console2.Error(ex);
}

这样做的好处是可以在Venus中看到异常的累计次数,也可以增加告警规则,例如:

xx

当次数超过一个阀值时,将会以红底色显示。



我们还可以定义一个告警规则,例如:

<Monitor AppName="XDemo.TestApp" MetricName="ERR" 
        Statistic="Incremental" DueTime="40" 
        Period="60" Threshold="100" Compare="MoreThan"/>

规则的含意是:

  • 针对 "XDemo.TestApp" 这个应用程序,
  • 在程序启动40秒后可始监控,
  • 每60秒获取 ERR 这个指标值(异常次数)
  • 如果增量超过 100,即产生一条告警通知。





不推荐的做法

try {
    //.............
} catch ( Exception e ) {
    Console2.Info($"刷新告警规则缓存失败 3分钟后重试 失败原因{e.Message}");
}
catch ( Exception ex ) {
    Console2.Info($"队列异常:{ex.Message}-{ex.StackTrace}");
}
catch ( Exception ex ) {
    Console2.Info($"Alert:{ex.Message}-{ex.StackTrace}");
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message + ex.StackTrace);
}
catch (Exception iex)
{
    Console2.Warnning(iex.ToString());
}
catch (Exception ex)
{
    Console.WriteLine(ex);
}
catch (Exception e)
{
    Console.WriteLine($"发送打开消息到rabbitmq异常{e.Message}");
}
catch (Exception e)
{
    Console.WriteLine("快照获取失败" + e.ToJson());
    return null;
}