我们有一个分类算法来对生产中的 Java 异常进行分类。该算法基于分层的人工定义规则,因此当出现一堆形成异常的文本时,它会确定什么样的异常(开发、可用性、配置等)和负责的组件(负责的最内部组件)例外)。在Java中,一个异常可以有几个引发异常,必须对整体进行分析。
例如,给定以下示例异常:
com.myapp.CustomException: Error printing ...
... (stack)
Caused by: com.foo.webservice.RemoteException: Unable to communicate ...
... (stack)
Caused by: com.acme.PrintException: PrintServer002: Timeout ....
... (stack)
首先,我们的算法将整个堆栈分成三个孤立的异常。之后,它开始从最内部的异常开始分析这些异常。在这种情况下,它确定这个异常(第二个引起的)是类型Availability
的并且负责的组件是“打印服务器”。这是因为有一条规则匹配包含与Timeout
该类型关联的单词Availability
。还有一条规则匹配com.acme.PrintException
并确定负责的组件是打印服务器。由于仅使用最内部的异常来确定所需的所有信息,因此忽略了上层异常,但情况并非总是如此。
如您所见,这种近似非常复杂(且混乱),因为人类必须在出现新异常时创建新规则。此外,新规则必须与当前规则兼容,因为用于对新异常进行分类的新规则不得更改任何已分类异常的分类。
我们正在考虑使用机器学习来自动化这个过程。显然,我不是在这里寻求解决方案,因为我知道复杂性,但我非常感谢一些建议来实现我们的目标。