有什么理由不总是记录堆栈跟踪?

Chr*_*ght 8 java logging stack-trace

今天在我们的应用程序中遇到了令人沮丧的问题,这个问题归结为ArrayIndexOutOfBounds异常被抛出.异常的类型只是所记录的所有内容,这是相当无用的(但是,哦,亲爱的遗留应用程序,我们仍然爱你,大多数).我已经重新部署了应用程序,其中的更改记录了异常处理中的堆栈跟踪(并立即找到了问题的根本原因),并想知道为什么之前没有其他人这样做过.您是否通常记录堆栈跟踪,是否有任何理由不这样做?

如果你能解释(为什么,不是如何)在java中跳跃箍以获得堆栈跟踪的字符串表示的理由,那么奖励积分!

sib*_*iba 10

  • 某些日志可能包含敏感数据,日志工具不一定足够安全,无法跟踪生产中的数据.

  • 记录太多会导致信息过多,即系统管理员根本没有信息.如果他们的日志填满了调试消息,他们将无法识别可疑模式.(多年前我看到一个系统出于安全原因记录所有系统调用.有太多日志,当一些无特权的用户开始成为root用户时,没有人看到它.)

最好的做法是使用适当的日志级别记录所有内容,并能够在生产中设置日志级别(至少在Java中不是一个大问题).

  • @matt b:已经知道特定类名的信息足以建立攻击向量(您还记得 Hibernate Validator xyz 中的错误。)在安全方面,如果您无法想象场景,最好假设最坏的情况。 (2认同)