代码之家  ›  专栏  ›  技术社区  ›  HectorLector

Java异常消息长度

  •  0
  • HectorLector  · 技术社区  · 6 年前

    我正在设计一个数据库表,它将记录Java异常消息。

    对于这种情况(也是出于兴趣),我想知道我将遇到的(最大)消息大小。

    目前我只对标准java语言异常感兴趣。

    • 邮件大小是否有技术限制?
    • 最常见的消息长度是什么?
    • 所有标准java异常的平均消息长度是多少?
    • 在不同的Java版本之间,消息有很大的变化吗?

    例子:

    try {
      //Some code, which throws an Exception
    } catch(Exception ex) {
      String msg = ex.toString();    //Use toString, because sometimes there is no message
      int size = msg.length();       //How large can this be?
    }
    

    Throwable toString()实现:

      public String toString() {
        String var1 = this.getClass().getName();
        String var2 = this.getLocalizedMessage();
        return var2 != null ? var1 + ": " + var2 : var1;
      }
    

    附加问题:是否有一个包含所有java语言异常消息的列表(英语),这样我就不必手动检查源文件了?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Karol Dowbecki    6 年前

    这个 Exception.getMessage() 返回 String 没有长度限制。没有所谓的“标准”消息长度,它将取决于您在代码库中使用的任何库,例如 javax.validation NullPointerException 通常没有信息。

    您应该从应用程序中获取几天的日志,并编写一个regex来度量异常的预期长度。有了这个值,你可以做出有根据的猜测。

    要么定义一个 VARCHAR 具有给定长度的列,并在异常消息太长时截断该异常消息,或者定义一个blob/clob列并存储整个 字符串 . 决定因素可能是您的数据库性能,例如。 Oracle allows VARCHAR to have only 4000 bytes .

        2
  •  1
  •   Michael Gantman    6 年前

    据我所知,消息长度没有限制,大多数情况下消息都很短,以便实用。使用max size 2000 chars可能是安全的,但是在DB中将其设为varchar,这样在每种情况下只占用与实际消息大小相等的空间。也是异常的方法 toString() 不会给你任何有意义的信息。如果没有消息,则将其存储为null或空字符串“”。