【问题标题】:Get stack trace unique number获取堆栈跟踪唯一编号
【发布时间】:2018-08-10 23:10:54
【问题描述】:

有没有办法为在某些异常之后出现的每个 Java 堆栈跟踪分配唯一的 ID?我想获取该号码并使用它来更快地进行故障排除。

【问题讨论】:

  • 不清楚您在寻找什么。某种哈希值就足够了吗?
  • @Henry 是的,每个错误堆栈都会打印到日志中的唯一哈希值就足够了
  • 你需要做一些实验,但编写一个散列函数对你很重要的信息进行散列应该不会太难。
  • 为了更快地“排除故障”,您正在寻求错误的解决方案,请使用日志框架来报告程序状态以及文件和行号。例如log4j.

标签: java


【解决方案1】:

为什么不直接创建一个自定义异常并对堆栈跟踪进行哈希处理并将其设置为唯一 ID?

import org.apache.commons.lang.exception.ExceptionUtils;

public class MyException extends Exception {
    private static final long serialVersionUID = -2145930259049207199L;

    private final int uniqueId;

    public MyException(String message) {
        super(message);
        this.uniqueId = ExceptionUtils.getStackTrace(this).hashCode();
    }

    public int getUniqueId() {
        return uniqueId;
    }

}

如果您希望每条消息都有一个真正唯一的 id(即,您不尝试跟踪重复的异常消息),您可以在构造函数中相应地设置 uniqueId:

this.uniqueId = UUID.randomUUID().toString();

【讨论】:

  • 请注意:hashCodes 不是唯一的,不同的 hashCodes 可以(并且对于更长的字符串)会相互冲突。
  • 非常正确,但我猜这就是他想要的(跟踪发生的重复异常)。如果他想要一个唯一的,那么他可以设置 uniqueId = UUID.randomUUID().toString()
  • 请注意,此解决方案使用 Apache 库,而不是普通的 Java。
猜你喜欢
  • 2010-10-11
  • 2013-11-16
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-21
相关资源
最近更新 更多