Что такое библиотека log для Rust?
Библиотека log — это стандартная абстракция для логирования в экосистеме Rust. Она предоставляет легковесный фасад (facade), который позволяет разработчикам писать код, генерирующий логи, не привязываясь к конкретной реализации логгера (например, env_logger, simple_logger или slog). Это аналог популярных библиотек logging в Python, но с фокусом на производительность и безопасность памяти.
Зачем нужна библиотека log?
Основная цель log — разделить генерацию логов и их обработку. Вы можете использовать макросы info!, warn!, error! в своём коде, а позже, подключив один из бэкендов (например, env_logger), перенаправить вывод в консоль, файл или систему мониторинга. Это особенно полезно для:
- Отладки сложных систем
- Мониторинга продакшн-приложений
- Создания библиотек, которые не должны диктовать пользователю способ логирования
Установка
Добавьте в Cargo.toml:
[dependencies]
log = "0.4"
env_logger = "0.10" # для вывода в консоль
Затем выполните cargo build.
Основные функции
- Макросы логирования:
error!,warn!,info!,debug!,trace!— с поддержкой форматирования строк как вprintln!. - Уровни фильтрации: можно задать минимальный уровень (например, только ошибки) через переменную окружения
RUST_LOG. - Расширяемость: поддержка кастомных логгеров через трейт
Log. - Безопасность: логи не влияют на производительность, если уровень отключен.
Пример кода на Rust
use log::{info, warn, error};
fn main() {
// Инициализация логгера (env_logger)
env_logger::init();
let user = "Alice";
let status = 200;
info!("Пользователь {} вошёл в систему", user);
warn!("Статус ответа: {} — возможно, устаревший кэш", status);
error!("Не удалось подключиться к базе данных: {}", "timeout");
}
Запустите с RUST_LOG=info cargo run, чтобы увидеть все сообщения уровня info и выше.
Когда использовать
Библиотека log идеальна для:
- Любого Rust-приложения, где нужна стандартная система логирования (CLI, серверы, утилиты).
- Библиотек — чтобы пользователь мог сам выбрать бэкенд.
- Проектов, мигрирующих с Python: концепция похожа на
logging.getLogger().
Избегайте log, если вам нужна асинхронная запись в файл или структурированные JSON-логи — в таких случаях лучше подойдут tracing или slog.
Также в библиотеке
Prisma для JavaScript (Node.js): полное руководство с примерами
Swagger/OpenAPI генерация для Node.js (JavaScript): инструменты и примеры
Валидация данных в Swift: библиотека Validator
JSON обработка в JavaScript (Node.js): полное руководство
Валидация данных в TypeScript: Zod, Yup и другие инструменты