我正在设计一个数据库表,它将记录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语言异常消息的列表(英文),所以我不必手动检查源文件?
答案 0 :(得分:2)
Exception.getMessage()
返回一个没有长度限制的String
。没有“标准”消息长度之类的东西,它取决于您在代码库中使用的任何库,例如javax.validation
的验证异常可能很长,而NullPointerException
通常没有消息。
您应该从应用程序中获取几天的日志,并编写一个正则表达式来衡量异常的预期长度。具有此值,您可以进行有根据的猜测。
要么定义给定长度的VARCHAR
列,然后在异常消息太长时截断异常消息,或者定义blob / clob列并存储整个String
。决定因素可能是您的数据库性能,例如Oracle allows VARCHAR
to have only 4000 bytes。
答案 1 :(得分:1)
据我所知,对消息长度没有任何限制,但在大多数情况下,要保证实用性。最大大小为2000个字符可能会很安全,但在DB中将其设置为varchar,这样在每种情况下它只占用等于实际消息大小的空间。另外,异常的方法toString()
不会给您任何有意义的信息。如果没有消息,则将其存储为null或空字符串“”。