Запрет Java напечатать трассировку стека при определенных исключениях - PullRequest
2 голосов
/ 10 февраля 2012

У меня есть класс безопасности, который создает исключение AccessDeniedException для пользователя, который не авторизован для определенной операции. Я сделал это даже аккуратно и поместил сообщение с нужной мне информацией.

Проблема в том, что теперь мои журналы заполнены следами стека каждый раз, когда я выкидываю. Я не хочу видеть трассировку стека для ЭТОГО исключения, а трассировки стека раздувают мои журналы.

Есть ли способ запретить Java печатать трассировку стека в журналах, если это исключение?

Спасибо!

-

llappall

Ответы [ 4 ]

4 голосов
/ 10 февраля 2012

Проблема в том, что теперь мои журналы полны следов стека

Это все равно что сказать "моя пожарная сигнализация продолжает срабатывать, как я могу сделать ее тише?" Есть только два хороших курса действий.

  • Определите, что это ложные тревоги, и измените вашу систему сигнализации, чтобы она не была настолько чувствительной к событиям, которые на самом деле не опасны. Бросок исключения не указывает на ошибку или даже на что-то очень примечательное, если это проверенное исключение. Даже если проверенное исключение стоит регистрировать, трассировка стека не будет стоить регистрировать, потому что трассировка стека полезна только для отладки.

  • Определите, что аварийные сигналы являются подлинными, и в этом случае выясните, почему вспыхивают пожары, и устраните все, что их зажигает. То есть исправление ошибок, вызывающих исключения. Если у вас много ошибок, которые заполняют ваш файл журнала, не имеет значения , который вы исправляете первым, поэтому просто исправьте то, что проще всего прочитать в файле журнала

2 голосов
/ 10 февраля 2012

Я не знаю, поможет ли это вам при ведении журнала, но если вы создаете исключение исключительно для улучшения логики и читабельности вашего кода, и если вы никогда не ожидаете, что вы, черт возьми, взялись, тогда переопределить метод fillInStackTrace(), например так:

public class AccessDeniedException  extends Exception  {
    public synchronized Throwable fillInStackTrace()  { return this; }
}

Это улучшит производительность вашей программы - значительно, если вы выбросите много из них. Это не устранит регистрацию. Другие ответы должны помочь с этим, но если они не будут, ваши сообщения журнала будут значительно уменьшены.

0 голосов
/ 10 февраля 2012

Либо вы можете решить поймать это конкретное исключение и ничего не делать с ним.Либо вы можете установить UncaughtExceptionHandler для текущего Thread.

Thread.currentThread().setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)

, а в дескрипторе выполнить instanceof для исключения, чтобы увидеть, является ли это конкретным исключением

0 голосов
/ 10 февраля 2012

Вам нужно выяснить, где вы ловите (если ловите) это исключение, и убедиться, что вы регистрируете не исключение, а только сообщение ...

...