Логування в Python: loguru проти logging

pic

Порівняння бібліотек для логування в Python: logging vs loguru

1. Loguru спрощує логування

pic

У розробці на Python логування є важливим інструментом. Воно допомагає розробникам записувати стан виконання програм, усувати проблеми та моніторити стан систем. Python має вбудовану бібліотеку logging. Однак з розвитком вимог багато хто почав використовувати loguru як альтернативу. У цій статті ми порівняємо ці дві бібліотеки, щоб допомогти вам вибрати більш підходяще рішення для логування.

Loguru — популярна стороння бібліотека для логування. Вона стала потужною заміною для logging, спрощуючи процес налаштування, підтримуючи ланцюгові виклики і надаючи більше функцій.

Переваги Loguru

  • Простота налаштування: Loguru не потребує створення складних конфігурацій. Ви можете завершити складне налаштування логування всього за кілька рядків коду.
  • Ланцюгові виклики: Підтримує ланцюгові виклики, що робить логування більш інтуїтивно зрозумілим.
  • Вихід на кілька цілей: Легко забезпечує виведення логів як на консоль, так і в файли, а також підтримує багаті налаштування форматування.
  • Додаткові функції: Підтримує такі можливості, як автоматичне стиснення логів, ротація файлів логів і збереження логів на певну кількість днів.

Основний приклад Loguru

from loguru import logger  

# Налаштування логування  
logger.add("app.log", rotation="500 MB") # Файл автоматично ротуватиметься, коли розмір перевищить 500 MB  

# Логування повідомлень  
logger.info("Це інформаційне повідомлення.")  
logger.warning("Це попередження.")  
logger.error("Це повідомлення про помилку.")

У цьому прикладі нам не потрібно додатково налаштовувати кілька обробників. Просто викликаючи logger.add(), ми можемо легко налаштувати логування у файл.

Виведення як у файл, так і на консоль

Loguru може дуже зручно забезпечити виведення як у файл, так і на консоль:

from loguru import logger  
import sys  

# Додаємо вихід логування до файлу та консолі  
logger.add("app.log", rotation="500 MB", retention="10 days") # Ротація файлів і збереження на 10 днів  
logger.add(sys.stdout, level="INFO") # Виведення на консоль  

# Логування повідомлень  
logger.info("Це інформаційне повідомлення.")  
logger.warning("Це попередження.")  
logger.error("Це повідомлення про помилку.")

Тут logger.add(sys.stdout, level="INFO") дозволяє виводити логи на консоль без додаткової конфігурації.
Переваги та недоліки вбудованого логування в Python

Переваги

  • Частина стандартної бібліотеки: logging є частиною стандартної бібліотеки Python, тому немає потреби в додатковій установці, і воно кросплатформене.
  • Висока налаштовуваність: logging надає потужні можливості для налаштування, дозволяючи гнучко контролювати формати логів, рівні та цілі (файли, консолі, віддалені сервери тощо).
  • Сумісність: Багато сторонніх бібліотек також використовують logging, що дозволяє легко інтегрувати різні логи.

Недоліки

  • Складна конфігурація: Базове використання logging досить просте, але більш складні конфігурації стають довгими та неінтуїтивно зрозумілими, особливо коли необхідно виводити логи до кількох цілей (наприклад, файлів і консолі) одночасно.
  • Відсутність ланцюгових викликів: logging не підтримує ланцюгові виклики, як це робить loguru, і потребує поетапної конфігурації.

Основний приклад

Простий приклад логування за допомогою logging:

import logging  

# Налаштування логування  
logging.basicConfig(  
 level = logging.INFO,  
 format='%(asctime)s - %(levelname)s - %(message)s',  
 filename='app.log',  
 filemode='a'  
)  

# Логування повідомлень  
logging.info("Це інформаційне повідомлення.")  
logging.warning("Це попередження.")  
logging.error("Це повідомлення про помилку.")

У цьому прикладі логи будуть записані у файл app.log, але не відображатимуться в консолі. Якщо ми хочемо виводити логи і в консоль, і у файл, потрібно додатково налаштувати StreamHandler.

Конфігурація для виведення у файл та консоль

Щоб виводити логи і в консоль, і у файл, потрібно налаштувати кілька обробників Handler. Код виглядає так:

import logging  

# Отримання логера  
logger = logging.getLogger()  
logger.setLevel(logging.INFO)  

# Обробник для файлу  
file_handler = logging.FileHandler('app.log')  
file_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))  

# Обробник для консолі  
console_handler = logging.StreamHandler()  
console_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))  

# Додавання обробників до логера  
logger.addHandler(file_handler)  
logger.addHandler(console_handler)  

# Логування повідомлень  
logger.info("Це інформаційне повідомлення.")  
logger.warning("Це попередження.")  
logger.error("Це повідомлення про помилку.")

Як видно, для досягнення порівняно простого функціоналу потрібно створити різні обробники Handler і налаштувати їх один за одним.

Детальне порівняння між logging та loguru

| Функція | logging | loguru |
|---------|---------|--------|
| Складність конфігурації | Висока, потрібно налаштовувати Handler | Низька, достатньо тільки logger.add() |
| Ротація файлів та збереження | Потрібна стороння підтримка модуля | Вбудована підтримка rotation і retention |
| Виведення в консоль та файл одночасно | Потрібно налаштувати кілька обробників | Легко досягається за допомогою sys.stdout |
| Ланцюгові виклики | Не підтримуються | Підтримуються |
| Простота використання | Підходить для складних конфігурацій та інтеграцій | Підходить для швидкої розробки та чіткого управління логами |

Рекомендовані сценарії використання

  • Прості додатки та швидка розробка: Loguru є кращим вибором. Він лаконічний і інтуїтивно зрозумілий, підходить для швидкого прототипування та невеликих проєктів.
  • Складні додатки та багатомодульні проєкти: Потужні можливості налаштування, які надає logging, більше підходять для складних систем, що вимагають багаторівневих конфігурацій, особливо для проєктів, що залежать від сторонніх бібліотек і хочуть централізовано керувати логами.

Підсумок

Обидві бібліотеки, loguru та logging, мають свої переваги та недоліки. Для більшості Python проєктів лаконічний синтаксис і потужні можливості loguru роблять її першим вибором для швидкої розробки. Для більших проєктів сумісність і гнучкість стандартної бібліотеки logging є більш підходящими.
Сподіваюся, ця стаття допоможе вам вибрати відповідний інструмент для логування для вашого проєкту.

Leapcell: Найкраща серверна платформа для хостингу веб-сайтів

pic

Нарешті, я хотів би порекомендувати найкращу платформу для розгортання Python додатків: Leapcell

1. Підтримка багатьох мов програмування

  • Розробляйте за допомогою JavaScript, Python, Go або Rust.

2. Безлімітне розгортання проєктів безкоштовно

  • Платіть тільки за використання — без запитів, без додаткових витрат.

3. Неперевершена економічна ефективність

  • Платіть за фактичне використання — без витрат на простої.
  • Приклад: $25 підтримує 6,94 млн запитів за середній час відгуку 60 мс.

4. Спрощений досвід для розробників

  • Інтуїтивно зрозумілий інтерфейс для безпроблемного налаштування.
  • Повністю автоматизовані CI/CD пайплайни та інтеграція з GitOps.
  • Метрики в реальному часі та логування для отримання корисних інсайтів.

5. Легке масштабування та висока продуктивність

  • Автоматичне масштабування для безперешкодної обробки високої кількості одночасних запитів.
  • Нульові операційні витрати — просто зосередьтесь на створенні.

pic

Дізнайтесь більше в документації!

Leapcell Twitter: https://x.com/LeapcellHQ

Перекладено з: Python Logging: loguru vs logging

Leave a Reply

Your email address will not be published. Required fields are marked *