2016-07-04 2 views
3

Для использования регистратора с Java, потому что теперь я использую такой код:Как уменьшить Logger.getLogger (...) шаблонного в каждом классе

Logger logger = Logger.getLogger("MyLog"); 
FileHandler fh; 

try { 

    // This block configure the logger with handler and formatter 
    fh = new FileHandler("c:\\MyLogFile.log", true); 
    logger.addHandler(fh); 
    logger.setLevel(Level.ALL); 
    SimpleFormatter formatter = new SimpleFormatter(); 
    fh.setFormatter(formatter); 

    // the following statement is used to log any messages 
    logger.log(Level.WARNING,"My first log"); 

} catch (SecurityException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

Но это всегда беспокоит меня несколько, чтобы добавить этот для каждого файла класса:

Logger l = Logger.getLogger("MyLog"); 

Как я могу реорганизовать это дублирование?

ответ

1

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

Вы могли бы сделать lprivate static или private поле класса, но кроме этого нет никаких существенных улучшений.

(Есть некоторые плохие идеи, как в public static «глобальной» переменный или private static декларации в «универсальном» базовый классе. Но это плохие идеи ... не более эффективные способы.)

Но, эй, одна строка кода для объявления вашего локального объекта логгера вряд ли «навязчива» ... не так ли?

+0

ok. Благодарю. если это то, что все делают, я буду придерживаться этого ... – Song

+0

Не все это делают. Смотри ниже. – JnRouvignac

0

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

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

Но, возможно, вы забудете войти в журнал, если исключение catch.

0

Мы используем поля отражения и статические поля и этот API: http://commons.forgerock.org/bom/apidocs/org/forgerock/i18n/slf4j/LocalizedLogger.html#getLoggerForThisClass()

+0

Спасибо за идею. Но я желаю привлечь как можно меньше библиотек. Я всегда считаю, что самое простое - лучшее. Если я могу избежать log4j, я постараюсь избежать этого .... – Song

+0

Я не предлагаю использовать эту библиотеку. Скорее, вы посмотрели, как это делается, и посмотрите, нравится вам подход и, возможно, скопируйте его. – JnRouvignac

Смежные вопросы