Докуметация Cтарт Статьи Форум Лента Вход
Не официальное русскоязычное сообщество
Главная
    Документация jMonkeyEngine
        jMonkeyEngine Уроки и Документация
            Документация для продвинутых пользователей
                Ведение журнала и мониторинг

Ведение журнала и мониторинг

Опубликованно: 03.06.2017, 14:23
Последняя редакция, Andry: 03.06.2017 15:53

Ведение журнала как новички

Многие разработчики просто используют System.out.println() для печати диагностических строк на терминале. Проблема в том, что до релиза вам нужно просмотреть весь свой код и убедиться, что вы удалили все эти вызовы println(). Если вы не хотите, чтобы ваши клиенты видели их, и не обращали внимание на зловещую устаревшую информацию диагностики отладки.

Ведение журнала как профи

Вместо println() используйте стандартный Java-регистратор java.util.logging. Он имеет много преимуществ для профессионального развития игры:

  • Вы отмечаете каждое сообщение в уровне журнала(log level): серьезная ошибка, информативное предупреждение и.т.д.
  • Вы можете отключить или включить распечатку сообщения журнала определенного уровня всего одной строкой кода.
    • Во время разработки вы установили бы уровень журнала fine, потому что вы хотите, чтобы все предупреждения были напечатаны.
    • При выпуске игры вы устанавливаете уровень журнала только на сообщения о серьезных ошибках(severe errors) что бы больше никогда не печаталась информация связанная с диагностикой.
  • Строка сообщения журнала локализуема и может использовать переменные. Оптимально, когда вы локализуете все сообщения об ошибках.

Чтобы печатать комментарии как профи, вы используете следующий синтаксис журнала.

  1. Объявляйте объекты журнала один раз для каждого файла. В следующем коде замените HelloWorld на имя класса, в котором вы используете эту строку.
    private static final Logger LOGGER = Logger.getLogger(HelloWorld.class.getName());
  2. Объявите информацию, которую вы хотите включить в сообщение. Переменные (здесь a, b, c) могут быть любыми печатными объектами Java.
    Пример:

    Vector3f a = cam.getLocation();
  3. Поместите переменные в новый массив Object. Обратитесь к переменным как {0}, {1}, {2} и.т.д. В строке сообщения. Переменные нумеруются в том порядке, в котором вы помещаете их в массив Object.
  4. Добавьте строку журнала и укажите уровень журнала:
    • Пример использования 1: во время отладки разработчик использует предупреждение, чтобы напомнить себе об ошибке:
      LOGGER.log(Level.WARNING, "why is {0} set to {1} again?!",
                            new Object[]{a , b});
    • Пример использования 2: для выпуска вы сообщаете клиенту о проблеме и как ее решить.
      LOGGER.log(Level.SEVERE, "MyGame error: {0} must not be {1} after {2}! Adjust flux generator settings.",
                            new Object[]{a , b , c});
Как вы видите в примерах, вы должны пометить ошибки потенциально «связанные с клиентами» нейтральным образом, и предложить способ их решения (если вы этого не сделаете, это не имеет значения для вашего клиента). Если ваша команда разработчиков использует ПРЕДУПРЕЖДЕНИЯ(WARNING) в качестве замены случайных println, убедитесь, что вы деактивируете их при выпуске.

Подробнее о уровнях журналов Java здесь.

Включение и выключение журнала

В версии для релиза вы отключите вывод журнала на терминал.

Чтобы отключить журнал по умолчанию для выпуска, вы устанавливаете уровень журнала только для сообщения о серьезных(severe) ошибках:

Logger.getLogger(””).setLevel(Level.SEVERE);

Во время разработки или бета-теста вы можете настроить журнал по умолчанию и установить уровень журнала только для сообщений с предупреждениями(warning):

Logger.getLogger(””).setLevel(Level.WARNING);

Для активации полного ведения журнала, например. Для отладки и тестирования используйте тонкий(fine) уровень:

Logger.getLogger(””).setLevel(Level.FINE);

Расширенная обработка ошибок

Когда не перехваченное исключение достигает определенных частей системы jME3, тогда в ответ по умолчанию должна регистрироваться ошибка, а затем произойдет выход из программы. Это связано с тем, что ошибка, возникающая в каждом кадре, будет быстро заполнять журналы с повторяющимися ошибками и потенциально маскировать или перезаписывать исходную причину проблемы или даже приложение может продолжать работать некоторое время, и затем переносить другие ошибки, вызванные первой, и сделать причину Трудно определимой.

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


Переведено для jmonkeyengine.ru, оригинал
Автор перевода: Andry

Добавить комментарий

jMonkeyEngine.ru © 2017. Все права сохранены.