Порівняння бібліотек для логування в Python: logging vs loguru
1. Loguru спрощує логування
У розробці на 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: Найкраща серверна платформа для хостингу веб-сайтів
Нарешті, я хотів би порекомендувати найкращу платформу для розгортання Python додатків: Leapcell
1. Підтримка багатьох мов програмування
- Розробляйте за допомогою JavaScript, Python, Go або Rust.
2. Безлімітне розгортання проєктів безкоштовно
- Платіть тільки за використання — без запитів, без додаткових витрат.
3. Неперевершена економічна ефективність
- Платіть за фактичне використання — без витрат на простої.
- Приклад: $25 підтримує 6,94 млн запитів за середній час відгуку 60 мс.
4. Спрощений досвід для розробників
- Інтуїтивно зрозумілий інтерфейс для безпроблемного налаштування.
- Повністю автоматизовані CI/CD пайплайни та інтеграція з GitOps.
- Метрики в реальному часі та логування для отримання корисних інсайтів.
5. Легке масштабування та висока продуктивність
- Автоматичне масштабування для безперешкодної обробки високої кількості одночасних запитів.
- Нульові операційні витрати — просто зосередьтесь на створенні.
Дізнайтесь більше в документації!
Leapcell Twitter: https://x.com/LeapcellHQ
Перекладено з: Python Logging: loguru vs logging