[Python, Программирование, Отладка] Многоразовый шаблон логирования на Python для всех ваших приложений в Data Science (перевод)
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Идеальный способ отлаживать и отслеживать приложения — хорошо определённые, информативные и удобно структурированные логи. Они являются необходимым компонентом любого — малого, среднего или крупного — проекта на любом языке программирования, не только на Python. Не используйте print() или корневой логгер по умолчанию, вместо этого настройте логирование на уровне проекта. К старту нового потока курса поData Science, мы перевели статью, автор которой решил поделиться своим шаблоном для логирования. Не лишним будет сказать, что этот шаблон пришёлся по душе многим специалистам — от дата-сайентистов профессионалов и до разработчиков ПО разного уровня.Я стал работать с модулем логирования Python пару лет назад и с тех пор изучил бесчисленное количество руководств и статей в Интернете о том, как работать с ним эффективно, с наилучшей настройкой для своих проектов.Все они хорошо объясняют, как настроить систему ведения лога для одного скрипта Python. Однако почти невозможно найти статью, которая объясняет, как настроить библиотеку ведения журнала Python для использования в масштабах всего приложения, а также то, как правильно интегрировать и удобно обмениваться информацией о ведении лога во всех модулях проекта.В этой статье я поделюсь своим личным шаблоном логирования, которым вы можете воспользоваться в любом проекте с несколькими модулями.
Предполагается, что вы уже знаете основы протоколирования. Как я уже сказал, существует множество хороших статей, из которых можно почерпнуть полезную информацию.
Приступим к делу!Создадим простой проект на PythonОбъяснение новой концепции всегда следует проводить сначала в терминах проще, не отвлекаясь на справочную информацию. Учитывая это, давайте пока инициализируем простой проект.Создайте папку под названием 'MyAwesomeProject'. Внутри неё создайте новый файл Python с именем app.py. Этот файл будет точкой старта приложения. Я буду использовать этот проект для создания простого рабочего примера шаблона, о котором говорю.Откройте свой проект в VSCode (или в предпочитаемом редакторе). Теперь создадим новый модуль для настройки логирования на уровне приложения. Назовем его logger. С этой частью мы закончили.Создаём логгер уровня приложенияЭто основная часть нашего шаблона. Создадим новый файл logger.py. Определим корневой логгер и воспользуемся им для инициализации логгера уровня приложения. Настало время немного покодить. Несколько импортов и название нашего приложения:
qimport logging
import sys
APP_LOGGER_NAME = 'MyAwesomeApp'
Функция, которую мы будем вызывать в нашем app.py:
def setup_applevel_logger(logger_name = APP_LOGGER_NAME, file_name=None):
logger = logging.getLogger(logger_name)
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
sh = logging.StreamHandler(sys.stdout)
sh.setFormatter(formatter)
logger.handlers.clear()
logger.addHandler(sh)
if file_name:
fh = logging.FileHandler(file_name)
fh.setFormatter(formatter)
logger.addHandler(fh)
return logger
Мы определим наш логгер с уровнем по умолчанию DEBUG и, чтобы структурировать сообщения логгера, воспользуемся Formatter. Затем присвоим его нашему обработчику, чтобы писать сообщения в консоль. Далее мы также обязательно включаем файл, в котором можем дополнительно хранить все наши сообщения лога. Это делается через логирование FileHandler. Наконец, мы возвращаем логгер. Необходима ещё одна функция, которая гарантирует, что наши модули могут вызывать логгер, когда необходимо. Определите функцию get_logger.
def get_logger(module_name):
return logging.getLogger(APP_LOGGER_NAME).getChild(module_name)
Также, чтобы работать с модулем как с пакетом, по желанию мы можем создать папку logger и поместить в нее этот файл. Если мы сделаем это, нам также нужно будет включить в папку файл _init.py и написать такую строку:
from .logger import *
Это делается, чтобы гарантировать, что мы можем импортировать наш модуль из пакета. Великолепно. Основа закончена.Устанавливаем логгер модульного уровняДля лучшего понимания шаблона можно сделать простой модуль, чтобы протестировать логгер. Давайте определим простой module.py.
import logger
log = logger.get_logger(__name__)
def multiply(num1, num2): # just multiply two numbers
log.debug("Executing multiply function.")
return num1 * num2
Теперь этот модуль имеет доступ к логгеру и должен вывести сообщение с соответствующим именем модуля. Давайте проверим его.Запустите сценарий и протестируйте логгерСоорудим app.py.
import logger
log = logger.setup_applevel_logger(file_name = 'app_debug.log')
import mymodule
log.debug('Calling module function.')
mymodule.multiply(5, 2)
log.debug('Finished.')
Заметили, как мы импортируем модуль после инициализации логгера? Да, это обязательно. Теперь убедитесь, что ваш каталог содержит эти файлы:
Папка проектаНаконец, запустите скрипт этой командой:
python3 app.py
Вы получите вывод вроде такого:
Структура каталогов также должна измениться: в ней должен появиться новый файл log. Проверим его содержимое.
Файл логовЗаключениеИменно так вы можете легко интегрировать логирование в рабочий процесс. Это просто, его можно легко расширить, включив многочисленные иерархии между различными модулями, перехват и форматирование исключений с помощью логгера, провести расширенную настройку с помощью dictConfig и так далее. Возможности безграничны! Репозиторий с этим кодом находитсяздесь. А если вам интересна сфера Data Science и вы думаете поучиться — по ссылке можете ознакомиться с программой курса и специализациями, которыми можно овладеть на нём.
Узнайте, как прокачаться и в других специальностях или освоить их с нуля:
Другие профессии и курсыПРОФЕССИИ
- Профессия Fullstack-разработчик на Python
- Профессия Java-разработчик
- Профессия QA-инженер на JAVA
- Профессия Frontend-разработчик
- Профессия Этичный хакер
- Профессия C++ разработчик
- Профессия Разработчик игр на Unity
- Профессия Веб-разработчик
- Профессия iOS-разработчик с нуля
- Профессия Android-разработчик с нуля
КУРСЫ
- Курс по Machine Learning
- Курс "Machine Learning и Deep Learning"
- Курс "Математика для Data Science"
- Курс "Математика и Machine Learning для Data Science"
- Курс "Python для веб-разработки"
- Курс "Алгоритмы и структуры данных"
- Курс по аналитике данных
- Курс по DevOps
===========
Источник:
habr.com
===========
===========
Автор оригинала: Yash Prakash
===========Похожие новости:
- [Open source, Программирование, Геоинформационные сервисы, Визуализация данных, Научно-популярное] Цифровая геология, или пусть машины думают и находят золото для нас в Западной Сибири без геологических данных
- [Python, Программирование, Математика, Визуализация данных] С помощью Python создаём математические анимации, как на канале 3Blue1Brown (перевод)
- [Python, Программирование] Преобразуем проект на Python в исполняемый файл .EXE (перевод)
- [Open source, Программирование, IT-инфраструктура, Открытые данные] Как свободное программное обеспечение может ускорить цифровизацию
- [Ненормальное программирование, Занимательные задачки, Python, Интервью] Если у вас нет плюсов
- [Информационная безопасность, Программирование, IT-инфраструктура] Автоматизация как вектор роста бизнеса (перевод)
- [Мессенджеры, Программирование, IT-стандарты, Kotlin, Управление сообществом] Социальный эксперимент: порядок из хаоса
- [Мозг, Здоровье] Что скрывает мозг или Как появляются ложные воспоминания
- [Разработка веб-сайтов, Python, Flask] Оно живое! Вышла версия Flask 2.0
- [Python, Data Engineering] Как построить систему распознавания лиц с помощью Elasticsearch и Python (перевод)
Теги для поиска: #_python, #_programmirovanie (Программирование), #_otladka (Отладка), #_skillfactory, #_python, #_logirovanie (логирование), #_programmirovanie (программирование), #_udobnye_shablony (удобные шаблоны), #_shablony_dlja_prilozhenij (шаблоны для приложений), #_data_science, #_blog_kompanii_skillfactory (
Блог компании SkillFactory
), #_python, #_programmirovanie (
Программирование
), #_otladka (
Отладка
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 02:31
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Идеальный способ отлаживать и отслеживать приложения — хорошо определённые, информативные и удобно структурированные логи. Они являются необходимым компонентом любого — малого, среднего или крупного — проекта на любом языке программирования, не только на Python. Не используйте print() или корневой логгер по умолчанию, вместо этого настройте логирование на уровне проекта. К старту нового потока курса поData Science, мы перевели статью, автор которой решил поделиться своим шаблоном для логирования. Не лишним будет сказать, что этот шаблон пришёлся по душе многим специалистам — от дата-сайентистов профессионалов и до разработчиков ПО разного уровня.Я стал работать с модулем логирования Python пару лет назад и с тех пор изучил бесчисленное количество руководств и статей в Интернете о том, как работать с ним эффективно, с наилучшей настройкой для своих проектов.Все они хорошо объясняют, как настроить систему ведения лога для одного скрипта Python. Однако почти невозможно найти статью, которая объясняет, как настроить библиотеку ведения журнала Python для использования в масштабах всего приложения, а также то, как правильно интегрировать и удобно обмениваться информацией о ведении лога во всех модулях проекта.В этой статье я поделюсь своим личным шаблоном логирования, которым вы можете воспользоваться в любом проекте с несколькими модулями. Предполагается, что вы уже знаете основы протоколирования. Как я уже сказал, существует множество хороших статей, из которых можно почерпнуть полезную информацию.
qimport logging
import sys APP_LOGGER_NAME = 'MyAwesomeApp' def setup_applevel_logger(logger_name = APP_LOGGER_NAME, file_name=None):
logger = logging.getLogger(logger_name) logger.setLevel(logging.DEBUG) formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") sh = logging.StreamHandler(sys.stdout) sh.setFormatter(formatter) logger.handlers.clear() logger.addHandler(sh) if file_name: fh = logging.FileHandler(file_name) fh.setFormatter(formatter) logger.addHandler(fh) return logger def get_logger(module_name):
return logging.getLogger(APP_LOGGER_NAME).getChild(module_name) from .logger import *
import logger
log = logger.get_logger(__name__) def multiply(num1, num2): # just multiply two numbers log.debug("Executing multiply function.") return num1 * num2 import logger
log = logger.setup_applevel_logger(file_name = 'app_debug.log') import mymodule log.debug('Calling module function.') mymodule.multiply(5, 2) log.debug('Finished.') Папка проектаНаконец, запустите скрипт этой командой: python3 app.py
Структура каталогов также должна измениться: в ней должен появиться новый файл log. Проверим его содержимое. Файл логовЗаключениеИменно так вы можете легко интегрировать логирование в рабочий процесс. Это просто, его можно легко расширить, включив многочисленные иерархии между различными модулями, перехват и форматирование исключений с помощью логгера, провести расширенную настройку с помощью dictConfig и так далее. Возможности безграничны! Репозиторий с этим кодом находитсяздесь. А если вам интересна сфера Data Science и вы думаете поучиться — по ссылке можете ознакомиться с программой курса и специализациями, которыми можно овладеть на нём. Узнайте, как прокачаться и в других специальностях или освоить их с нуля: Другие профессии и курсыПРОФЕССИИ
=========== Источник: habr.com =========== =========== Автор оригинала: Yash Prakash ===========Похожие новости:
Блог компании SkillFactory ), #_python, #_programmirovanie ( Программирование ), #_otladka ( Отладка ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 02:31
Часовой пояс: UTC + 5