Как научиться логированию на Python: руководство начинающим

Содержание:

Бывает так, что заказчик обращается к программисту за тем, чтобы он восстановил приложение, которое перестало работать. А веб-разработчик не может поднять сайт, потому что он не знает, в чем проблема. И найти эту проблему уже не сможет.

Как научиться логированию на Python: руководство начинающим

Так часто бывает, когда новичок не создал или не учел файлы логирования в Python. Если бы он задокументировал их, то знал бы, где они находятся. Достал бы их оттуда, прочитал и решил проблему заказчика. Если же он не создал файл логирования, то будет очень трудно восстановить приложение.

Давайте разберем сегодня, как создается документ логирования и что для этого нужно.

Что означает слово Logging в программировании

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

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

Если вы захотите установить этот файл в код, вам нужно просто написать фразу import logging, так как разработчиками языка Питон модуль логирования установлен в фреймворк изначально.

В модуле есть функция, с которой программисту придется работать. Вызвать он ее может, прописав следующую фразу: basicConfig(). В скобках потребуется указать один из параметров:

  • level — уровень логирования;
  • filename — локация, куда будут поступать все документы с зарегистрированной информацией;
  • format — файл, в котором будет сохранен лог. Например, его можно сохранить в текстовом документе, в Ворде или Эксель. Исходите из того формата, который вам легче будет открыть и прочитать.

Для чего нужно логирование

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

Как научиться логированию на Python: руководство начинающим

Логирование — это способ, с помощью которого можно эффективно контролировать работу веб-приложения. Если еженедельно просматривать информацию в логах, можно заранее определить, что код начинает себя неправильно вести, и исправить его прежде, чем перед пользователем закроется приложение из-за ошибки, которую не учел веб-разработчик.

Для чего нужны уровни

Многие начинающие программисты не знают, для чего нужны и как отображаются уровни логирования. Посмотрите на следующие слова:

  • debug;
  • info;
  • warning;
  • error.

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

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

Во время запуска выводится просто левел info. Если же происходит какая-то аварийная ситуация, то используется warning.

Внимание! Лог debug приводит к большому росту выводимой информации. Поэтому его лучше использовать в важных случаях.

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

Какие бывают стандарты логирования

С уровнями разобрались, давайте посмотрим на то, какими бывают стандарты логирования. Их всего будет пять:

  1. Log4j — этот стандарт используют те программисты, которые сразу на него подсели. В большинстве своем они не видят перехода на другой.
  2. JUL. Этот стандарт постепенно умирает. Его использовали в самом начале пути программирования веб-приложений. Сейчас те разработчики, которые эксплуатировали его, постепенно начинают пользоваться стандартом logback. Но об этом поговорим чуть позже. На подходе третий стандарт.
  3. Commons-logging. Этот тип используют в legacy-фреймворках. Программисты, которые пользуются данным стандартом, очень сильно боятся, что причинят неудобство пользователям, если начнут эксплуатировать другой вид стандартов.
  4. SLF4J. Передовые веб-разработчики используют этот стандарт. В последнее время его можно найти почти во всех библиотеках. Так получилось потому, что многие, кто пользовался третьим стандартом, перейдя на описываемый, осознали всю кошмарность предыдущего.
  5. LogBack. Это самый современный стандарт, который используется на всех веб-серверах. Он удобный и популярный на сегодняшний день.

Давайте теперь разберем принцип логирования.

Как происходит логирование

Давайте используем следующий код:

Как научиться логированию на Python: руководство начинающим

Какую информацию вы обнаружите в виде текста:

Как научиться логированию на Python: руководство начинающим

Это сообщение расскажет вам, что в приложении есть ошибка.

Разработчик здесь сможет увидеть только вывод, что произошла ошибка. Так происходит потому, что до конца не были выполнены настройки кода, поэтому логгер не может показывать другую информацию. Он выводит только информацию об ошибке.

В фреймворке SLF4J находится много уровней логирования. С помощью них вы сможете правильно вести документацию логов. Управление ими осуществляется просто даже новичками-программистами. Так происходит потому, что вся нужная информация, весь код уже заложены в класс Logger.

Вам потребуется только уметь печатать код для вызова этих классов. Например, для того, чтобы узнать просто информацию о приложении, вам надо вызвать метод logger.info(). Если нужно найти ошибку, то logger.error(). Для того чтобы получить предупреждение, пропишите следующую фразу: logger.warn().

Чем поможет аппендер

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

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

Как научиться логированию на Python: руководство начинающим

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

В первую очередь вам придется создать в папке src документ под названием log4j.xml. Если же вы пользуетесь Maven, то собираете этот файл в папке resources. Что такое формат xml, вы должны понимать, так как эти вещи объясняются на самых первых уроках по программированию.

Давайте теперь посмотрим, на что будет похож новый код:

<?xml version=»1.0″ encoding=»UTF-8″?>

<Configuration status=»INFO»>

<Appenders>

<File name=»MyFileAppender» fileName=»C:UsersUsernameDesktoptestlog.txt» immediateFlush=»false» append=»false»>

<PatternLayout pattern=»%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} — %msg%n»/>

</File>

</Appenders>

<Loggers>

<Root level=»INFO»>

<AppenderRef ref=»MyFileAppender»/>

</Root>

</Loggers>

</Configuration>

Теперь поговорим о том, как создать тот самый аппендер:

  1. <File> говорит о том, что необходимо создавать файловый документ.
  2. Прописываем name=»MyFileAppender» — это название аппендера.
  3. Найдем путь к документу через пропись кода: fileName=»C:UsersUsernameDesktoptestlog.txt».
  4. Этот код append=»true» даст нам понять о том, нужно ли прописывать инфу в конец документа. Помните, что при установке кода false после каждого нового запуска приложения старая информация лога будет уничтожаться.
  5. Теперь настроим форматирование: <PatternLayout pattern=»%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} — %msg%n»/> Сюда вы посредством регулярных выражений вписываете формат текста в вашем логе.

Вот что получилось:

<Loggers>

<Root level=»INFO»>

<AppenderRef ref=»MyFileAppender»/>

</Root>

</Loggers>

Теперь пропишите необходимый уровень. Если вы установили уровень получения информации, то пишите: Info.

Для создания ссылки внутри тега <Root> пропишите тег <ApprenderRef> и прибавьте к нему параметр ref=”. Это будет название аппендера.

Давайте посмотрим на то, как будет выглядеть этот код:

<import org.slf4j.Logger>;

<import org.slf4j.LoggerFactory>;

<public class MyTestClass {

public static final Logger LOGGER = LoggerFactory.getLogger(MyTestClass.class)>;

< public static void main(String[] args) {

LOGGER.info(«Отсюда начинается работа приложения»)>;

< try {

LOGGER.warn(«Указывает о том, что произошло какое-то действие, препятствующее завершению логической цепочке событий»);

System.out.println(12/0);

} catch (ArithmeticException x) {

LOGGER.error(«Указывает о произошедшей ошибке»)>;

}

}

}

Теперь вы знаете, как выводить данные о произошедших коллизиях и других параметрах приложения на экран.

Заключение

Вам нравится кодить, вы хотели бы изучать программирование и окунуться в него с головой? Записывайтесь на курсы по программированию от DevEducation. Здесь вас научат правильно писать код, создавать логи и многому другому.

Присоединяйся к DevEducation — стань востребованным специалистом и построй карьеру в IT!