-
Notifications
You must be signed in to change notification settings - Fork 5
Логирование (Java)
Galina Tomilina edited this page Jul 15, 2016
·
1 revision
t.b.c.
t.b.c.
t.b.c.
Для использования логгера добавьте:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
За исключением особых случаев, создавайте один логгер на класс, например:
private static final Logger LOGGER;
static {
LOGGER = LoggerFactory.getLogger(
"com.analyzeme.controllers.IndexController");
}
Logback предоставляет шесть стандартных уровней логирования. Их трактовка зависит от конкретного приложения, в нашем случае принята следующая:
//Очень подробное описание происходящего (вплоть до записи каждой итерации цикла)
//по умолчанию не отображается в общем логе
LOGGER.trace("message");
//Вход/выход нетривиального метода, важное событие/ветвление внутри метода
LOGGER.debug("message");
//Ошибки, связанные с неверным вводом или др. (обрабатываемые)
//сведения о жизненном цикле всей системы и обращении к внешним источникам
LOGGER.info("message");
//Для непредвиденных ошибок, которые не допускают завершения работы конкретного сценария
LOGGER.warn("message");
//Для ошибок, после которых приложение не сможет продолжать работу
LOGGER.error("message");
Отображение логов настраивается в файле logback.xml, соотношение отображаемые уровни/режим приведено в таблице ниже
displayed\level on | TRACE | DEBUG | INFO | WARN | ERROR | OFF |
---|---|---|---|---|---|---|
TRACE | YES | NO | NO | NO | NO | NO |
DEBUG | YES | YES | NO | NO | NO | NO |
INFO | YES | YES | YES | NO | NO | NO |
WARN | YES | YES | YES | YES | NO | NO |
ERROR | YES | YES | YES | YES | YES | NO |
В нашем случае режим отображения - DEBUG, т.е. в списке вы увидите всё, кроме TRACE-уровня.
- Используйте только английский язык
- Для каждого класса используйте один логгер с названием вида
com.analyzeme.{package}.{className}
. В исключительных ситуациях допустимо использование дополнительного логгера видаcom.analyzeme.{package}.{className}.{methodName}
- Используйте верные уровни ведения логов
//так не надо
LOGGER.error("getName(): method started");
//так тоже
LOGGER.trace("veryImportantDatabase(): connection failed");
- Общая схема записи
{имяМетода}(): {название объекта/операции} {суть сообщения}
. Например:
LOGGER.debug("analyze(): analysis started");
- Пишите краткие сообщения
//плохая мысль
"doPut(): workflow was not able to start properly because of resource not being able to lock. Resource name: {0}."
//лучше
"doPut(): workflow cannot be started: resource '{0}' was not acquired."
- Используйте одни и те же названия/формулировки для одного и того же объекта/события
//не так
LOGGER.info("Prediction model {0} was loaded", pm.ID);
LOGGER.info("PredictionModel (ID={0}) decrypted successfully", pm.ID);
LOGGER.info("Cannot link PM: {0} to product (ID={1})", pm.ID, product.ID);
- Для логирования сведений об объекте реализуйте его метод
toString()
. Для крупных объектов есть смысл предусмотреть методtoShortString()
с важными сведениями.
//не надо
LOGGER.debug(obj.getName());
LOGGER.debug(obj.getID());
LOGGER.debug(obj.get100500otherProperties());
- Для исключений также используйте метод
toString()
. Нежелательно использовать простоgetMessage()
, т.к. вы потеряете достаточное количество информации. - Не программируйте в логах
//нет!
LOGGER.info("Processing replicate {0}." + (++replicateIndex));
- Project structure
- Heroku
- Coding Guidelines
- [Java](Coding Guidelines)
- Html
- Логирование (Java)
- Analyzers: [TEMPLATE]
- Общая схема вычисляемых функций
- Линейный коэффициент корреляции
- Уравнение линейной регрессии
- Анализ временных рядов
- Анализ одномерных временных рядов: вычисление тренда, сезонной и шумовой компонент несколькими способами
- Критерий Стьюдента
- Analyzers: Kolmogorov Smirnov Test for two samples
- Анализ главных компонент (Principal Component Analysis, PCA)
- Показатель Ляпунова для временных рядов
- Navigation
- REST API
- Классы - источники данных
- Добавление нового источника данных
- [Analyzers](Architecture of analize function)
- Analyzers (version 2)
- Пользователи, проекты и файлы
- Java R classic integration
- Renjin (R in JVM)
- R integration architecture
- R scripts
- RConfiguration
- Полезные функции в R
- Angular 2 in JavaScript
- Learning resources, etc.
- Angular 2 приложение проектов
- Точка входа для более быстрой разработки Angular 2 приложения
- Interpolation
- [Charts comparison](displaying graphs control)
- What is Servlet?
- Ace-editor
- Библиотека CoreArray
- Сборка CoreArray
- Сравнение скоростей способов доступа к CoreArray
- Переделка Gdsfmt под java
- Разбор структуры файла из центра биоинформатики