Есть ли способ написать L.e (...) вместо Logger.getLogger (getClass ()). Error (...)? - PullRequest
0 голосов
/ 12 июля 2011

Есть ли способ написать L.e (...) вместо Logger.getLogger (getClass ()). Error (...)?

// A foolish simple implementation
public class L {
    public static void e(String msg) {
        Logger.getLogger(L.class).error(msg);
    }
}

Основные проблемы, с которыми приходится сталкиваться, - это фильтрация и номера строк. Если кто-то добавляет фильтр в файл конфигурации log4j, он должен применяться так же, как если бы я вызывал метод Logger.getLogger (getClass ()) из исходного класса. Это означает, что переданный объект класса должен быть извлечен из трассировки стека. Я думаю, что это выполнимо. Я бы просто сделал "new Throwable ()", затем вызвал fillStackTrace и затем переместился по нему, чтобы получить информацию о вызывающем методе.

Во-вторых, и, возможно, трудно изменить без непосредственного изменения кода Log4j, номер строки, выводимый регистратором, должен быть номером строки метода, вызывающего L.e (msg), а не номером строки внутри этого метода.

Какие-нибудь предложения по решению этих проблем?

Ответы [ 2 ]

0 голосов
/ 12 июля 2011

Мне неясно, но я думаю, что вы хотите использовать Throwable.setStackTrace () со стеком так, как вам хочется.

0 голосов
/ 12 июля 2011

Вы можете сделать что-то вроде этого

public class L {

     public static void e(Class<?> clazz, Exception e) {
          Logger.getLogger(clazz).log(Level.ERROR, "AN exception" , e);
      }
}

Тогда вы можете вызвать L.e(this.getClass(), e); для ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...