Rust:
Rejestrowanie zdarzeń
Jak to zrobić:
Załóżmy podstawowe logowanie w Rust przy użyciu skrzynki (crate) log, która dostarcza fasadę logowania, oraz env_logger, implementację logowania dla skrzynki log. Najpierw dodaj je do twojego Cargo.toml:
[dependencies]
log = "0.4.14"
env_logger = "0.9.0"Teraz, skonfiguruj i zainicjuj logger w twoim main.rs:
use log::{info, warn};
fn main() {
env_logger::init();
info!("To jest wiadomość informacyjna.");
warn!("To jest wiadomość ostrzegawcza.");
}Uruchom swoją aplikację z RUST_LOG=info cargo run, a zobaczysz wyjście:
INFO: To jest wiadomość informacyjna.
WARN: To jest wiadomość ostrzegawcza.Pobaw się zmienną środowiskową RUST_LOG, ustawiając ją na error, warn, info, debug, lub trace, aby kontrolować werbalność twoich logów.
Dogłębna analiza
Koncepcja logowania nie jest niczym nowym; istnieje od wczesnych lat informatyki. Zanim logowanie stało się powszechne w oprogramowaniu, deweloperzy polegali na prymitywnych metodach, takich jak instrukcje wydruku lub narzędzia debuggerów, aby śledzić wykonanie programu. Wraz ze wzrostem złożoności programów rosła również potrzeba strukturalnych podejść do logowania.
W Rust, skrzynka log abstrahuje szczegóły implementacji logowania, pozwalając deweloperom na podłączenie różnych zaplecz logowania. Chociaż env_logger jest często wybierany, istnieją alternatywy, takie jak fern, slog czy tracing, każda z własnym zestawem funkcji i opcji konfiguracji.
Niektóre kwestie do rozważenia przy implementacji logowania to:
Poziomy Logów: Kontrola werbalności jest kluczowa. Skrzynka
logRust definiuje kilka poziomów logowania: error, warn, info, debug i trace, w malejącej kolejności powagi.Wydajność: Logowanie może wpłynąć na wydajność. Jest krytyczne, by używać go oszczędnie, upewniając się, że unika się logowania na ścieżkach krytycznych dla wydajności lub nadmiernie rozwlekłych logów w produkcji.
Strukturalne Logowanie: Nowoczesne najlepsze praktyki obejmują strukturalne logowanie, w którym logi są zapisywane w formacie możliwym do odczytu przez maszyny, takim jak JSON. Biblioteki takie jak
slogpozwalają na strukturalne logowanie w Rust, które może być indeksowane i przeszukiwane przy użyciu systemów zarządzania logami, takich jak ELK Stack lub Splunk.Asynchroniczne Logowanie: Aby zminimalizować wpływ na główną aplikację, logowanie może być wykonane asynchronicznie. Często osiąga się to, mając bibliotekę logującą piszącą do kolejki w pamięci, a oddzielny wątek przetwarza kolejkę i zapisuje logi do miejsca docelowego.
Konfiguracja: Wiele frameworków logowania wspiera konfigurację przez zmienne środowiskowe, pliki konfiguracyjne i/lub kod. Ta elastyczność jest kluczem do dostosowywania wyjścia w różnych środowiskach (rozwój, staging, produkcja).
Zobacz także
- Dokumentacja skrzynki
log: https://docs.rs/log/ - Dokumentacja skrzynki
env_logger: https://docs.rs/env_logger/ - Strona logowania Rust by Example: https://doc.rust-lang.org/rust-by-example/std_misc/log.html
- Skrzynka
slog, alternatywny framework logowania: https://github.com/slog-rs/slog - Tracing, framework do instrumentacji programów Rust: https://crates.io/crates/tracing