我有一个安全类,它会对未被授权进行某项操作的用户抛出AccessDeniedException。我做得很整齐,并在那里放了一个带有我需要的信息的消息。
问题是现在我的日志每次抛出时都会堆满堆栈跟踪。我不关心看到这个异常的堆栈跟踪,并且堆栈跟踪正在膨胀我的日志。
有没有办法告诉Java不要将堆栈跟踪打印到日志中,如果这是异常?
谢谢!
-
llappall
答案 0 :(得分:4)
问题是现在我的日志充满了堆栈跟踪
这就像是说“我的火警不断发声,我怎么能让它更安静?”。只有两个很好的行动方案。
确定这些是错误警报,并更改您的警报系统,使其对实际上并非危险的事件不那么敏感。抛出异常并不表示存在错误,即使是非常显着的错误,如果它是一个检查过的异常。即使已检查的异常值得记录,堆栈跟踪也不值得记录,因为堆栈跟踪仅对调试有用。
确定警报是真实的,在这种情况下,找出为什么火灾不断爆发并修复点燃它们的任何东西。也就是说,修复导致异常抛出的错误。如果您有许多漏洞淹没您的日志文件,那么首先修复哪个无关紧要,所以只需修复日志文件中最容易阅读的文件
答案 1 :(得分:2)
我不知道这是否会对您的日志记录有所帮助,但是如果您创建一个Exception纯粹是为了提高代码的逻辑性和可读性,并且如果您从未想过要知道它来自何处,那么覆盖fillInStackTrace()
方法,如下所示:
public class AccessDeniedException extends Exception {
public synchronized Throwable fillInStackTrace() { return this; }
}
这将提高你的程序的性能 - 如果你扔了很多它们会大大提高。它不会消除日志记录。其他答案应该有帮助,但如果他们不这样做, 的日志消息将会大大减少。
答案 2 :(得分:0)
您需要调查捕获(如果捕获)此异常的位置,并确保不记录异常,而只记录消息...
答案 3 :(得分:0)
您可以决定捕获该特定异常并且不对其做任何事情。
您可以在当前UncaughtExceptionHandler
上设置Thread
。
Thread.currentThread().setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
并在句柄中对异常执行instanceof
以查看是否是特定异常