Метод ведения журнала для сгенерированного исключения - PullRequest
1 голос
/ 17 января 2012

У меня есть методы, которые определены как ...

public static void myMethod выдает IOException ....

как я могу использовать класс Logger для регистрации исключения, которое выбрасывается в файл с именем "test.log". Я слышал об использовании logger.throwing ... но, похоже, не работает. Может ли кто-нибудь дать мне пошаговый совет, как это сделать? Мне просто нужно регистрировать выбрасываемое исключение (я не использовал try catch). Большое вам спасибо!

Ответы [ 3 ]

2 голосов
/ 17 января 2012

Вам нужно будет добавить предложение catch. Ниже приведено начало использования java.util.logging.Logger. Обратите внимание, что многие проекты используют регистратор Apache, который немного мощнее и сложнее. Допустим, у вас есть класс com.myCompany.Foo, который читает некоторые файлы

как правило, в начале класса в объявлениях статического поля у вас будет

private static final Logger LOGGER = Logger.getLogger("com.myCompany.Foo");

тогда, когда у вас есть метод, который выдает исключения (это глупый метод!)

int readFirstCharOfFile(File f) throws IOException {
   FileReader reader = null;
   try {
      reader = new FileReader(f);
      return reader.read();
   }
   catch (IOException ioe) {
      // You have a lot of possibilities here, but this seems most reasonable
      LOGGER.log(Level.SEVERE, ioe.getMessage(), ioe);

      // whether you rethrow the Exception "depends" on the contract, but, in our case
      // the method declaration says that we do, so we do.
      throw ioe;
   }
   finally {
      if (reader != null)
         reader.close();
   }
}

Сложнее всего настроить Logger для записи в нужное место. IIRC, по умолчанию идет стандартная ошибка. Там много «магии», которую я никогда полностью не понимал, поэтому я не мог объяснить все тонкости.

Вы можете получить информацию в Google, вот несколько полезных ссылок, которые я нашел. ссылка1 и ссылка2

0 голосов
/ 15 апреля 2013

Попробуйте использовать jcabi-аспекты и его @LogException аннотацию:

public class Resource {
  @LogExceptions
  public String load(URL url) {
    return url.openConnection().getContent();
  }
}
0 голосов
/ 18 января 2012

Если вам нужен более автоматический подход, чем тот, который задан user949300, вы можете взглянуть на Аспектно-ориентированное программирование (AOP), которое позволяет вам регистрировать исключения для всех методов с небольшим количеством кода.Просто Google для аспекта журнала журнала исключений или журнала событий Java * AOP .

См. Также вопрос Аудит Java: система для обнаружения брошенных / пойманных исключений (aop?)

...