Каков хороший способ передать полезную информацию о состоянии в исключение в Java?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Каков хороший способ передать полезную информацию о состоянии в исключение в Java?

Сообщение Anonymous »

Сначала я заметил некоторую путаницу в своем вопросе. Я не спрашиваю о том, как настроить регистратор или как его правильно использовать, а скорее о том, как захватить всю информацию, которая была бы записана на более низком уровне журналирования, чем текущий уровень журналирования, в сообщении об исключении.

Я заметил в Java два шаблона регистрации информации, которые могут быть полезны разработчику при возникновении исключения.

Следующий шаблон кажется очень распространенным. По сути, вы просто располагаете информацией журнала журнала по мере необходимости, чтобы в случае возникновения исключения у вас была трассировка журнала.

Код: Выделить всё

try {
String myValue = someObject.getValue();
logger.debug("Value: {}", myValue);
doSomething(myValue);
}
catch (BadThingsHappenException bthe) {
// consider this a RuntimeException wrapper class
throw new UnhandledException(bthe);
}
Недостаток описанного выше подхода заключается в том, что если вашим пользователям требуются относительно тихие журналы и им нужен высокий уровень надежности до такой степени, что они просто не могут «попробовать еще раз в режиме отладки», сообщение об исключении само по себе содержит недостаточно данных, чтобы быть полезными для разработчика.

Следующий шаблон, который я видел, пытается смягчить эту проблему, но кажется некрасивым:

Код: Выделить всё

String myValue = null;
try {
myValue = someObject.getValue();
doSomething(myValue);
}
catch (BadThingsHappenException bthe) {
String pattern = "An error occurred when setting value. [value={}]";
// note that the format method below doesn't barf on nulls
String detail = MessageFormatter.format(pattern, myValue);
// consider this a RuntimeException wrapper class
throw new UnhandledException(detail, bthe);
}
Приведенный выше шаблон, кажется, в некоторой степени решает проблему, однако я не уверен, что мне нравится объявлять так много переменных вне области действия блока try. Особенно, когда мне приходится иметь дело с очень сложными состояниями.

Единственный другой подход, который я видел, — это использование карты для хранения пар ключ-значение, которые затем выгружаются в сообщение об исключении. Я не уверен, что мне нравится этот подход, поскольку он, похоже, приводит к раздуванию кода.

Есть ли какое-то Java-вуду, которого мне не хватает? Как вы обрабатываете информацию о состоянии исключения?

Подробнее здесь: https://stackoverflow.com/questions/111 ... on-in-java
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»