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

Как использовать уровни журналов в java

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

  • SEVERE (самый высокий)
  • ВНИМАНИЕ
  • INFO
  • CONFIG
  • FINE
  • FINER
  • FINEST

Я не могу понять использование каждого уровня ведения журнала.

Может ли кто-нибудь дать мне хороший пример, показывающий все уровни ведения журнала и их использование?

4b9b3361

Ответ 1

Как правило, вам не нужны все эти уровни, SEVERE, WARNING, INFO, FINE может быть достаточно. Мы используем Log4J и следующие уровни:

  • ОШИБКА: Любая ошибка/исключение, которое является или может быть критическим. Наш Logger автоматически отправляет электронное письмо для каждого такого сообщения на наших серверах (использование: logger.error("message");)

  • WARN: любое сообщение, которое может предупредить нас о потенциальных проблемах, например. когда пользователь пытался войти в систему с неправильными учетными данными - что может указывать на атаку, если это происходит часто или в короткие промежутки времени (использование: logger.warn("message");)

  • INFO: все, что мы хотим знать при просмотре файлов журнала, например. при запуске/завершении запланированного задания (использование: logger.info("message");)

  • DEBUG: Как говорится в названии, отладочные сообщения, которые мы редко включаем. (использование: logger.debug("message");)

Красота заключается в том, что если вы установите уровень журнала WARN, сообщения об информации и отладки не будут иметь никакого влияния на производительность. Если вам нужно получить дополнительную информацию из производственной системы, вы можете снизить уровень до INFO или DEBUG в течение короткого периода времени (так как вы получите гораздо больше записей в журнале, которые сделают ваши файлы журналов больше и труднее читать). Регулировка уровней журналов и т.д. Обычно может выполняться во время выполнения (наш экземпляр JBoss проверяет изменения в этом конфиге каждую минуту или около того).

Ответ 2

Эта выдержка относится к следующему удивительному сообщению.

ОШИБКА - случилось что-то ужасное, что должно быть немедленно исследовали. Никакая система не может терпеть элементы, зарегистрированные в этом уровень. Пример: NPE, недоступная база данных, критический пример использования не может быть продолжено.

WARN - процесс может быть продолжен, но будьте осторожны. На самом деле я всегда хотел иметь два уровня: один для очевидных проблемы, в которых существует обход (например: "Текущие данные недоступен, используя кешированные значения" ) и второй (назовите его: ВНИМАНИЕ) для потенциальных проблем и предложений. Пример: "Запуск приложения режим разработки" или "Консоль администрирования не защищена пароль". Приложение может переносить предупреждающие сообщения, но они всегда должны быть обоснованы и рассмотрены.

INFO - завершен важный бизнес-процесс. В идеальном мире, администратор или продвинутый пользователь должен уметь понимать INFO сообщений и быстро узнать, что делает приложение. Для Например, если заявка касается бронирования авиабилетов, там должна быть только одна заявка INFO за каждый билет, говорящий: "[Кто] забронировал билет из [Where] to [Where]". Другое определение сообщения INFO: каждое действие, которое значительно изменяет состояние приложения (обновление базы данных, внешний системный запрос).

DEBUG - разработчики. Я расскажу позже, что информация заслуживает регистрации.

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

PS: прочитайте TRACE как VERBOSE

Ответ 3

Вот хорошее введение в ведение журнала в Java: http://www.javapractices.com/topic/TopicAction.do?Id=143

Java поставляется с API протоколирования, поскольку версия 1.4.2: http://download.oracle.com/javase/1.4.2/docs/guide/util/logging/overview.html

Вы также можете использовать другие фреймворки регистрации, такие как Apache Log4j, который является самым популярным: http://logging.apache.org/log4j

Я предлагаю вам использовать структуру абстракции ведения журнала, которая позволяет вам изменять структуру ведения журнала без повторного факторинга кода. Таким образом, вы можете начать с использования Jul (Java Util Logging), а затем перейти к Log4j без изменения вашего кода. Самый популярный фасад регистрации - slf4j: http://www.slf4j.org/

Привет,

Ответ 4

Это уровни. Вы рассмотрели бы серьезность сообщения, которое вы регистрируете, и используйте соответствующие уровни.

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

Ответ 5

Документация java.util.logging.Level позволяет определить, когда использовать уровень журнала и целевую аудиторию этого уровня журнала.

Большая часть путаницы с java.util.logging находится в методах трассировки. Он должен быть в документации уровня класса, но вместо этого поле Level.FINE дает хороший обзор:

FINE - уровень сообщений, предоставляющий информацию трассировки.

Все FINE, FINER и FINEST предназначены для относительно подробного отслеживания. Точное значение трех уровней будет варьироваться между подсистемами, но в общем случае FINEST следует использовать для наиболее объемного подробного вывода, FINER для несколько менее подробного вывода и FINE для сообщений с наименьшим объемом (и самым важным).

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

Сообщения FINE могут включать в себя такие вещи, как незначительные (восстанавливаемые) сбои. Проблемы, связанные с потенциальными проблемами производительности, также заслуживают регистрации как FINE.

Одна важная вещь для понимания, которая не упоминается в документации уровня, заключается в том, что информация о трассировке сайта журнала регистрируется в FINER. Если вы зарегистрируете сообщение как FINE, вы сможете настроить систему ведения журнала, чтобы увидеть выход журнала с помощью записей журнала контроля потока, связанных с сообщением журнала. Поэтому используйте FINE только тогда, когда записи журнала управления потоком не требуются в качестве контекста для понимания этого сообщения трассировки журнала.

FINER указывает довольно подробное сообщение трассировки. По умолчанию регистрируются вызовы для ввода, возврата или исключения исключений на этом уровне.

В общем, большинство использования FINER следует оставить для вызова entering, exiting и throwing. Это будет в основном зарезервировать FINER для трассировки сайта, когда ведется подробное ведение журнала.

FINEST указывает очень подробное сообщение трассировки.

Используйте FINEST, когда сообщение журнала трассировки, которое вы собираетесь писать, требует контекстной информации о потоке управления программой. Вы также должны использовать FINEST для отслеживания сообщений, которые выдают большие объемы выходных данных.

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

CONFIG хорошо работает для поддержки администраторов системы с перечисленными выше элементами.

Обычно сообщения INFO записываются на консоль или ее эквивалент. Таким образом, уровень INFO должен использоваться только для разумно значимых сообщений, которые будут иметь смысл для конечных пользователей и системных администраторов.

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

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

Примером использования может быть исключение из AutoCloseable.close.

В целом SEVERE сообщения должны описывать события, которые имеют большое значение и которые будут препятствовать нормальному выполнению программы. Они должны быть разумно понятны конечным пользователям и системным администраторам.

Например, если у вас есть транзакция в вашей программе, где, если какой-либо из этих шагов завершится с ошибкой, все шаги, которые были аннулированы, SEVERE были бы подходящими для использования в качестве уровня журнала.

Ответ 6

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

Ответ 7

разные уровни журналов полезны для инструментов, которые могут зависеть от ваших файлов журнала. Обычно файл журнала содержит много информации. Чтобы избежать перегрузки информации (или здесь stackoverflow ^^), вы можете использовать уровни журналов для группировки информации.

Ответ 8

Этот совет показывает, как использовать Logger в любом приложении Java. Logger должен настроить Formatter и Handler. Существует множество типов обработчиков и форматировщиков. В этом примере FileHandler используется для хранения всех сообщений журнала в файле журнала. И простой форматтер используется для форматирования сообщений журнала в форме, читаемой человеком.

package MyProject;

import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

public class MyLogger {

  public static void main(String[] args) {

    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();
    }

  }

}

еще несколько примеров, которые вы можете найти здесь https://docs.oracle.com/javase/7/docs/api/java/util/logging/Logger.html