SlideShare a Scribd company logo
1 of 24
Обработка исключительных
ситуаций, журналирование и логи
Разработчики. Занятие 5
Исключительная ситуация –
любая нештатная ситуация, в
которой программа не может
продолжить работу
Исключительные ситуации
Причины:
1. внутренние – ошибка в
программе
2. внешние – неверные входные
данные, проблемы в
конфигурации системы
Исключительные ситуации
Что делать:
1. предотвращать – для
внутренних, конфигурационных
2. обрабатывать – для неверных
входных данных, недоступности
ресурсов
Исключительные ситуации
Защитное программирование –
стиль, при котором во всех
функциях (методах) обязательно
проверяется предусловие и при
невыполнении генерируется
исключительная ситуация
Исключительные ситуации
Защита от внутренних
ошибок:
1. утверждения (assert)
2. модульные тесты
Исключительные ситуации
Защита от неверных данных:
1. проверка предусловия –
только если просто
2. в остальных случаях –
отлавливание исключений
Исключительные ситуации
Функция (метод) может:
1. вернуть специальное значение
(-1, NULL, пустой объект, код
ошибки и т.д.)
2. выбросить исключение (если
язык поддерживает)
Исключительные ситуации
Функция (метод) не должна:
1. изменять глобальные объекты
программы
2. выводить информацию об
ошибке в консоль или внешний
файл
Исключительные ситуации
Хорошее поведение функции
(метода) в Java:
1. возвращать пустые
объекты, NULL
2. выбрасывать исключения
Исключительные ситуации
Важно:
список выбрасываемых
исключений – часть контракта
функции (метода)
Исключительные ситуации
Плохой стиль:
выбрасывать из функции
(метода) все возникшие в ней
исключения
Исключительные ситуации
В чем проблемы:
1. вызывающий код должен
подключать лишние библиотеки
2. слишком большой список
исключений
Исключительные ситуации
В чем проблемы:
3. раскрываются детали
реализации
4. затрудняется использование
интерфейсов
Исключительные ситуации
Хороший стиль:
создать свои исключения по
типам ситуаций и использовать
их, пример
Исключительные ситуации
Журналирование –
фиксация всех действий с целью
восстановления данных после
сбоя и возможности отката к
предыдущему состоянию
Журналирование и логи
Логгирование –
фиксация только ошибочных
ситуаций и важных этапов работы
программы с целью поиска
внутренних и конфигурационных
ошибок
Журналирование и логи
Логгирование в Java –
библиотека log4j и надстройки
над ней, вывод в консоль или
файл
Журналирование и логи
Уровни логгирования в Java:
Fatal – фатальный сбой
Error – можно продолжать работу
Warning – потенциальная ошибка
Info – важный шаг, информация
Debug – отладочный вывод
Журналирование и логи
Принято логгировать:
1. пойманное исключение –
Error, Fatal
2. проблемы конфигурации –
Warning, Error, Fatal
Журналирование и логи
Принято логгировать:
3. начало и завершение важных
функций – особенно соединения с
внешними системами – с
сохранением отправленных и
принятых данных - Info
Журналирование и логи
Принято логгировать:
4. все подряд с уровнем Debug
Журналирование и логи
Помните:
грамотно организованное
логгирование сохранит вашу
карму от лучей смерти
команды поддержки
Журналирование и логи
Когда нужно журналирование:
1. финансовые системы
2. системы с бизнес-транзакциями
при обработке данных
3. любые базы данных
Журналирование и логи

More Related Content

Viewers also liked

Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 5
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 5Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 5
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 5
7bits
 
Стажировка-2014, занятие 6 (часть 2). Транзакции в БД
Стажировка-2014, занятие 6 (часть 2). Транзакции в БДСтажировка-2014, занятие 6 (часть 2). Транзакции в БД
Стажировка-2014, занятие 6 (часть 2). Транзакции в БД
7bits
 
Стажировка-2013, разработчики, занятие 12. Базы данных (продолжение)
Стажировка-2013, разработчики, занятие 12. Базы данных (продолжение)Стажировка-2013, разработчики, занятие 12. Базы данных (продолжение)
Стажировка-2013, разработчики, занятие 12. Базы данных (продолжение)
7bits
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 7
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 7Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 7
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 7
7bits
 
Стажировка-2013, общее, 13 занятие. Бизнес-модели, Lean Stsrt up
Стажировка-2013, общее, 13 занятие. Бизнес-модели, Lean Stsrt upСтажировка-2013, общее, 13 занятие. Бизнес-модели, Lean Stsrt up
Стажировка-2013, общее, 13 занятие. Бизнес-модели, Lean Stsrt up
7bits
 
Стажировка-2014, занятие 7. Языки разметки, HTML5, CSS3
Стажировка-2014, занятие 7. Языки разметки, HTML5, CSS3Стажировка-2014, занятие 7. Языки разметки, HTML5, CSS3
Стажировка-2014, занятие 7. Языки разметки, HTML5, CSS3
7bits
 
This is a dedication to a lovely friend
This is a dedication to a lovely friendThis is a dedication to a lovely friend
This is a dedication to a lovely friend
Honeyy P Freeman
 
CASOS CLÍNICOS REJUVENECIMIENTO
CASOS CLÍNICOS REJUVENECIMIENTOCASOS CLÍNICOS REJUVENECIMIENTO
CASOS CLÍNICOS REJUVENECIMIENTO
cirugiarinofacial
 
CASOS CLÍNICOS DE RINOPLASTÍA DE REVISIÓN
CASOS CLÍNICOS DE RINOPLASTÍA DE REVISIÓNCASOS CLÍNICOS DE RINOPLASTÍA DE REVISIÓN
CASOS CLÍNICOS DE RINOPLASTÍA DE REVISIÓN
cirugiarinofacial
 
CASOS CLÍNICOS DE RINOPLASTÍA
CASOS CLÍNICOS DE RINOPLASTÍACASOS CLÍNICOS DE RINOPLASTÍA
CASOS CLÍNICOS DE RINOPLASTÍA
cirugiarinofacial
 
Стажировка-2014, занятие 8. Обзор Rails framework (Ruby)
Стажировка-2014, занятие 8. Обзор Rails framework (Ruby)Стажировка-2014, занятие 8. Обзор Rails framework (Ruby)
Стажировка-2014, занятие 8. Обзор Rails framework (Ruby)
7bits
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
7bits
 
Стажировка-2014, занятие 4. Планирование процесса тестирования.
Стажировка-2014, занятие 4. Планирование процесса тестирования.Стажировка-2014, занятие 4. Планирование процесса тестирования.
Стажировка-2014, занятие 4. Планирование процесса тестирования.
7bits
 
Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование.
Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование.Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование.
Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование.
7bits
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 2
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 2Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 2
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 2
7bits
 

Viewers also liked (20)

Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 5
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 5Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 5
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 5
 
Стажировка-2014, занятие 6 (часть 2). Транзакции в БД
Стажировка-2014, занятие 6 (часть 2). Транзакции в БДСтажировка-2014, занятие 6 (часть 2). Транзакции в БД
Стажировка-2014, занятие 6 (часть 2). Транзакции в БД
 
Стажировка-2013, разработчики, занятие 12. Базы данных (продолжение)
Стажировка-2013, разработчики, занятие 12. Базы данных (продолжение)Стажировка-2013, разработчики, занятие 12. Базы данных (продолжение)
Стажировка-2013, разработчики, занятие 12. Базы данных (продолжение)
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 7
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 7Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 7
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 7
 
Спецкурс 2014, занятие 8. Транзакции в БД
Спецкурс 2014, занятие 8. Транзакции в БДСпецкурс 2014, занятие 8. Транзакции в БД
Спецкурс 2014, занятие 8. Транзакции в БД
 
Спецкурс 2014, занятие 6. Базы данных
Спецкурс 2014, занятие 6. Базы данныхСпецкурс 2014, занятие 6. Базы данных
Спецкурс 2014, занятие 6. Базы данных
 
Стажировка-2013, общее, 13 занятие. Бизнес-модели, Lean Stsrt up
Стажировка-2013, общее, 13 занятие. Бизнес-модели, Lean Stsrt upСтажировка-2013, общее, 13 занятие. Бизнес-модели, Lean Stsrt up
Стажировка-2013, общее, 13 занятие. Бизнес-модели, Lean Stsrt up
 
Стажировка-2014, занятие 7. Языки разметки, HTML5, CSS3
Стажировка-2014, занятие 7. Языки разметки, HTML5, CSS3Стажировка-2014, занятие 7. Языки разметки, HTML5, CSS3
Стажировка-2014, занятие 7. Языки разметки, HTML5, CSS3
 
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-выводКурс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
 
This is a dedication to a lovely friend
This is a dedication to a lovely friendThis is a dedication to a lovely friend
This is a dedication to a lovely friend
 
Work-Life-Balance (By Arsalan Memon)
Work-Life-Balance (By Arsalan Memon)Work-Life-Balance (By Arsalan Memon)
Work-Life-Balance (By Arsalan Memon)
 
CASOS CLÍNICOS REJUVENECIMIENTO
CASOS CLÍNICOS REJUVENECIMIENTOCASOS CLÍNICOS REJUVENECIMIENTO
CASOS CLÍNICOS REJUVENECIMIENTO
 
CASOS CLÍNICOS DE RINOPLASTÍA DE REVISIÓN
CASOS CLÍNICOS DE RINOPLASTÍA DE REVISIÓNCASOS CLÍNICOS DE RINOPLASTÍA DE REVISIÓN
CASOS CLÍNICOS DE RINOPLASTÍA DE REVISIÓN
 
CASOS CLÍNICOS DE RINOPLASTÍA
CASOS CLÍNICOS DE RINOPLASTÍACASOS CLÍNICOS DE RINOPLASTÍA
CASOS CLÍNICOS DE RINOPLASTÍA
 
Kegagalan Pendedahan Akta Pekerja 1955 di Malaysia
Kegagalan Pendedahan Akta Pekerja 1955 di MalaysiaKegagalan Pendedahan Akta Pekerja 1955 di Malaysia
Kegagalan Pendedahan Akta Pekerja 1955 di Malaysia
 
Стажировка-2014, занятие 8. Обзор Rails framework (Ruby)
Стажировка-2014, занятие 8. Обзор Rails framework (Ruby)Стажировка-2014, занятие 8. Обзор Rails framework (Ruby)
Стажировка-2014, занятие 8. Обзор Rails framework (Ruby)
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
 
Стажировка-2014, занятие 4. Планирование процесса тестирования.
Стажировка-2014, занятие 4. Планирование процесса тестирования.Стажировка-2014, занятие 4. Планирование процесса тестирования.
Стажировка-2014, занятие 4. Планирование процесса тестирования.
 
Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование.
Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование.Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование.
Стажировка-2014, занятие 2 (часть 1). Абстракции, именование, документирование.
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 2
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 2Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 2
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 2
 

Similar to Стажировка-2013, разработчики, занятие 5. Исключительные ситуации, журналирование и логи

Как сделать логирование приятным в быстро развивающемся проекте - Иван Савин,...
Как сделать логирование приятным в быстро развивающемся проекте - Иван Савин,...Как сделать логирование приятным в быстро развивающемся проекте - Иван Савин,...
Как сделать логирование приятным в быстро развивающемся проекте - Иван Савин,...
it-people
 
Java. Lecture 05. Handling Exceptions and Debugging
Java. Lecture 05. Handling Exceptions and DebuggingJava. Lecture 05. Handling Exceptions and Debugging
Java. Lecture 05. Handling Exceptions and Debugging
colriot
 
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Ontico
 

Similar to Стажировка-2013, разработчики, занятие 5. Исключительные ситуации, журналирование и логи (7)

Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...
Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...
Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...
 
Спецкурс 2014, занятие 5 (часть 1). Исключения и логи
Спецкурс 2014, занятие 5 (часть 1). Исключения и логиСпецкурс 2014, занятие 5 (часть 1). Исключения и логи
Спецкурс 2014, занятие 5 (часть 1). Исключения и логи
 
Спецкурс 2014, занятие 4. Конфиги, сборка, автотесты
Спецкурс 2014, занятие 4. Конфиги, сборка, автотестыСпецкурс 2014, занятие 4. Конфиги, сборка, автотесты
Спецкурс 2014, занятие 4. Конфиги, сборка, автотесты
 
Software craftsmanship meetup #9. Логирование, мониторинг, оповещение
Software craftsmanship meetup #9. Логирование, мониторинг, оповещениеSoftware craftsmanship meetup #9. Логирование, мониторинг, оповещение
Software craftsmanship meetup #9. Логирование, мониторинг, оповещение
 
Как сделать логирование приятным в быстро развивающемся проекте - Иван Савин,...
Как сделать логирование приятным в быстро развивающемся проекте - Иван Савин,...Как сделать логирование приятным в быстро развивающемся проекте - Иван Савин,...
Как сделать логирование приятным в быстро развивающемся проекте - Иван Савин,...
 
Java. Lecture 05. Handling Exceptions and Debugging
Java. Lecture 05. Handling Exceptions and DebuggingJava. Lecture 05. Handling Exceptions and Debugging
Java. Lecture 05. Handling Exceptions and Debugging
 
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
 

More from 7bits

Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап? Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
7bits
 

More from 7bits (20)

Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап? Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
Гудбай, ИТ-лофт! Тарасенко Анна: Стартап = факап?
 
Гудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофта
Гудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофтаГудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофта
Гудбай, ИТ-лофт! Денис Нелюбин: Новейшая история ИТ-лофта
 
Гудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакать
Гудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакатьГудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакать
Гудбай, ИТ-лофт! Лопатюк Саша: Договоримся не плакать
 
Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи
Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи
Гудбай, ИТ-лофт! Гончаровский Игорь: IT-Loft без связи
 
Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE
Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE
Гудбай, ИТ-лофт! Мячин Сергей: LUDUM DARE + IT-LOFT = LOVE
 
Goodbye, IT-loft! Тараканов Алексей: Идеология в IT
Goodbye, IT-loft! Тараканов Алексей: Идеология в ITGoodbye, IT-loft! Тараканов Алексей: Идеология в IT
Goodbye, IT-loft! Тараканов Алексей: Идеология в IT
 
Курс Java-2016. Занятие 13. Spring
Курс Java-2016. Занятие 13. SpringКурс Java-2016. Занятие 13. Spring
Курс Java-2016. Занятие 13. Spring
 
Курс Java-2016. Занятие 12. DBMS, JDBC
Курс Java-2016. Занятие 12. DBMS, JDBCКурс Java-2016. Занятие 12. DBMS, JDBC
Курс Java-2016. Занятие 12. DBMS, JDBC
 
Курс Java-2016. Занятие 11. Servlets, JSP
Курс Java-2016. Занятие 11. Servlets, JSPКурс Java-2016. Занятие 11. Servlets, JSP
Курс Java-2016. Занятие 11. Servlets, JSP
 
Курс Java-2016. Занятие 10. Reflection, mock
Курс Java-2016. Занятие 10. Reflection, mockКурс Java-2016. Занятие 10. Reflection, mock
Курс Java-2016. Занятие 10. Reflection, mock
 
Курс Java-2016. Занятие 09. Web
Курс Java-2016. Занятие 09. WebКурс Java-2016. Занятие 09. Web
Курс Java-2016. Занятие 09. Web
 
Курс Java-2016. Занятие 08. Итераторы, многопоточность
Курс Java-2016. Занятие 08. Итераторы, многопоточностьКурс Java-2016. Занятие 08. Итераторы, многопоточность
Курс Java-2016. Занятие 08. Итераторы, многопоточность
 
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекцииКурс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
Курс Java-2016. Занятие 07. Логи, фасады, библиотеки и коллекции
 
Курс Java-2016. Занятие 05. Тестирование и Java
Курс Java-2016. Занятие 05. Тестирование и JavaКурс Java-2016. Занятие 05. Тестирование и Java
Курс Java-2016. Занятие 05. Тестирование и Java
 
Курс Java-2016. Занятие 04 (часть 2). Git и GitHub
Курс Java-2016. Занятие 04 (часть 2). Git и GitHubКурс Java-2016. Занятие 04 (часть 2). Git и GitHub
Курс Java-2016. Занятие 04 (часть 2). Git и GitHub
 
Курс Java-2016. Занятие 04 (часть 1). Еще немного про Generics
Курс Java-2016. Занятие 04 (часть 1). Еще немного про GenericsКурс Java-2016. Занятие 04 (часть 1). Еще немного про Generics
Курс Java-2016. Занятие 04 (часть 1). Еще немного про Generics
 
курс Java 2016. занятие 03. интерфейсы, generic, исключения
курс Java 2016. занятие 03. интерфейсы, generic, исключениякурс Java 2016. занятие 03. интерфейсы, generic, исключения
курс Java 2016. занятие 03. интерфейсы, generic, исключения
 
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с MavenКурс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
 
Курс Java-2016. Занятие 01. Введение в Java как технологию
Курс Java-2016. Занятие 01. Введение в Java как технологиюКурс Java-2016. Занятие 01. Введение в Java как технологию
Курс Java-2016. Занятие 01. Введение в Java как технологию
 
Спецкурс-2015. Занятие 05. Системы контроля версий
Спецкурс-2015. Занятие 05. Системы контроля версийСпецкурс-2015. Занятие 05. Системы контроля версий
Спецкурс-2015. Занятие 05. Системы контроля версий
 

Стажировка-2013, разработчики, занятие 5. Исключительные ситуации, журналирование и логи