Подтвердить что ты не робот

Хорошие примеры использования java.util.logging

Я хочу использовать журналы в своей программе. Я слышал о java.util.logging, но я не знаю, с чего начать.

Есть ли какие-нибудь примеры того, что я могу сделать с протоколированием? Как использовать журнал в моей собственной программе?

4b9b3361

Ответ 1

java.util.logging не позволяет вам добавить еще один файл jar с вашим приложением, и он хорошо работает с хорошим Formatter.

Как правило, в верхней части каждого класса, вы должны иметь:

private static final Logger LOGGER = Logger.getLogger( ClassName.class.getName() );

Затем вы можете просто использовать различные возможности класса Logger.


Используйте Level.FINE для всего, что отлаживается на верхнем уровне потока выполнения:

LOGGER.log( Level.FINE, "processing {0} entries in loop", list.size() );

Используйте Level.FINER/Level.FINEST внутри циклов и в тех местах, где вам не всегда нужно видеть эту детальную информацию при отладке основных проблем с потоком:

LOGGER.log( Level.FINER, "processing[{0}]: {1}", new Object[]{ i, list.get(i) } );

Используйте параметризованные версии средств ведения журнала, чтобы не создавать тонны мусора String concatenation, которые GC должен будет не отставать. Object[], как указано выше, дешево, обычно при распределении стека.


При обработке исключений всегда регистрируйте полные сведения об исключении:

try {
    ...something that can throw an ignorable exception
} catch( Exception ex ) {
    LOGGER.log( Level.SEVERE, ex.toString(), ex );
}

Я всегда передаю ex.toString() в качестве сообщения здесь, потому что тогда, когда я "grep -n" для "Exception" в файлах журналов, я тоже вижу это сообщение. В противном случае он будет находиться на следующей строке вывода, созданной дампом стека, и вам нужно иметь более продвинутый RegEx, чтобы он соответствовал этой строке, что часто дает вам больше результатов, чем вам нужно просматривать.

Ответ 2

Должен объявить регистратор следующим образом:

private final static Logger LOGGER = Logger.getLogger(MyClass.class.getName());

поэтому, если вы реорганизуете свое имя класса, оно следует.

Я написал статью о java logger с примерами здесь.

Ответ 3

Существует множество примеров, а также различных типов для ведения журнала. Посмотрите пакет java.util.logging.

Пример кода:

import java.util.logging.Logger;

public class Main {

  private static Logger LOGGER = Logger.getLogger("InfoLogging");

  public static void main(String[] args) {
    LOGGER.info("Logging an INFO-level message");
  }
}

Без жесткого кодирования имя класса:

import java.util.logging.Logger;

public class Main {
  private static final Logger LOGGER = Logger.getLogger(
    Thread.currentThread().getStackTrace()[0].getClassName() );

  public static void main(String[] args) {
    LOGGER.info("Logging an INFO-level message");
  }
}

Ответ 4

SLF4J - лучший каротажный фасад, чем Apache Commons Logging (ACL). Он имеет мосты для других фреймворков регистрации, поэтому прямые вызовы ACL, Log4J или Java Util Logging проходят через SLF4J, так что вы можете направлять весь вывод в один файл журнала, если хотите, только с одним файлом конфигурации журнала. Почему ваше приложение использует несколько фреймворков регистрации? Потому что, возможно, используют сторонние библиотеки, особенно старые.

SLF4J поддерживает различные реализации каротажа. Он может выводить все на стандарт, использовать Log4J или Logback (рекомендуется для Log4J).

http://www.slf4j.org/

http://logback.qos.ch/

Ответ 5

Я бы использовал minlog лично. Это чрезвычайно просто, так как класс ведения журнала состоит из нескольких сотен строк кода.

Ответ 6

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