防止Java在某些异常下打印堆栈跟踪

lla*_*all 3 java logging exception

我有一个安全类,它会向AccessDeniedException未经授权的用户进行某项操作。我什至使它整洁,并在其中添加了我需要的信息。

问题在于,现在我每次抛出日志时,日志中都充满了堆栈跟踪。我不在乎看到异常的堆栈跟踪,并且堆栈跟踪使我的日志膨胀。

有没有一种方法可以告诉Java,如果出现此异常,则不要将堆栈跟踪记录打印到日志中?

Rae*_*ald 5

问题是现在我的日志中充满了堆栈跟踪

这就像在说“我的火警警报一直不停,我该如何使其静音?”。只有两种良好的行动方案。

  • 确定这些是虚假警报,并更改警报系统,以使它对实际上没有危险的事件不太敏感。如果引发了异常,则抛出异常并不表示存在错误,甚至不表示任何异常现象。即使检查异常值得记录,堆栈跟踪也不值得记录,因为堆栈跟踪仅对调试有用。

  • 确定警报是真实的,在这种情况下,找出火灾持续爆发的原因,并修复点燃它们的一切。也就是说,要修复导致引发异常的错误。如果您有许多臭虫泛滥日志文件也没关系你解决第一,所以刚修好取其最容易在日志文件中读取


Ral*_*pin 5

我不知道这是否会对您的日志记录有所帮助,但是如果您纯粹为了提高代码的逻辑和可读性而创建异常,并且如果您从没想过它到底来自哪里,那么请重写该fillInStackTrace()方法,像这样:

public class AccessDeniedException  extends Exception  {
    public synchronized Throwable fillInStackTrace()  { return this; }
}
Run Code Online (Sandbox Code Playgroud)

这将提高你的程序的性能——如果你抛出很多这样的程序,效果会显着提高。它不会消除日志记录。其他答案应该对此有所帮助,但如果没有,您的日志消息将会大大减少。


Nim*_*Nim 0

您需要调查在哪里捕获(如果捕获)此异常,并确保您不记录异常,而仅记录消息...