Я хочу использовать журналы в своей программе. Я слышал о java.util.logging, но не знаю, как начать.
Есть ли примеры того, что можно сделать с помощью протоколирования? Как я могу использовать логирование в своей собственной программе?
Ява.утиль.ведение журналов
удерживает вас от того, чтобы перевозить более одного jar файла с вашего приложения, и это работает хорошо с хорошим форматирования.
В общем, в верхней части каждого класса, вам необходимо иметь:
private static final Logger LOGGER = Logger.getLogger( ClassName.class.getName() );
Затем вы можете просто использовать различные объекты регистратор класс.
Уровень Использования.Хорошо
ни за что отладка на верхнем уровне потоков исполнения:
LOGGER.log( Level.FINE, "processing {0} entries in loop", list.size() );
Используйте Уровень.Уровень тоньше/
.Внутри тончайших` петель и в местах, где вы не всегда должны видеть, что много деталей при отладке основных вопросов:
LOGGER.log( Level.FINER, "processing[{0}]: {1}", new Object[]{ i, list.get(i) } );
Используйте параметризованные версии журнала удобства, чтобы не производить тонны конкатенации строк фигня, что ГК будет отставать. Объекта []
, как выше дешевая, на выделение стека обычно.
С обработкой исключений, всегда полного журнала сведения об исключении:
try {
...something that can throw an ignorable exception
} catch( Exception ex ) {
LOGGER.log( Level.SEVERE, ex.toString(), ex );
}
Я всегда прохожу экс.метод toString()
как сообщения здесь, потому что тогда, когда я "в грэп -Н-И" и"
исключение`" в лог-файлы, я вижу сообщение тоже. В противном случае, это будет на следующей строке вывод, сгенерированный дамп стека, и вы должны иметь более расширенные регулярные выражения, чтобы соответствовать этой линии, который часто получает вас больше продукции, чем нужно полистать.
Должен заявить регистратор такой:
private final static Logger LOGGER = Logger.getLogger(MyClass.class.getName());
так что, если вы рефакторинг имени класса следует.
Я написал статью о Java logger с примеры.
Существует множество примеров, а также различных типов для ведения журнала. Посмотрите на пакет 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");
}
}
SLF4J - это лучший фасад протоколирования, чем Apache Commons Logging (ACL). Он имеет мосты к другим системам протоколирования, делая прямые вызовы ACL, Log4J или Java Util Logging проходящими через SLF4J, так что вы можете направить весь вывод в один файл журнала, если хотите, с помощью всего одного файла конфигурации журнала. Зачем вашему приложению использовать несколько фреймворков протоколирования? Потому что сторонние библиотеки, которые вы используете, особенно старые, вероятно, используют их.
SLF4J поддерживает различные реализации протоколирования. Он может выводить все в standard-out, использовать Log4J или Logback (рекомендуется вместо Log4J).
Я'd с помощью minlog, лично. Это'очень простые, как класс лесозаготовок-это несколько сотен строк кода.
Я бы предложил вам использовать утилиту протоколирования Apache'commons. Она хорошо масштабируется и поддерживает отдельные файлы журналов для разных регистраторов. [См. здесь] (https://commons.apache.org/proper/commons-logging/guide.html#Configuration).