use elara_runtime::observability::{
init_observability, LogFormat, LogLevel, LogOutput, LoggingConfig, ObservabilityConfig,
};
use tracing::{debug, error, info, trace, warn};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== Minimal Observability Example ===\n");
let config = ObservabilityConfig {
logging: Some(LoggingConfig {
level: LogLevel::Debug,
format: LogFormat::Pretty, output: LogOutput::Stdout,
}),
tracing: None, metrics_server: None, };
println!("Initializing logging...");
let handle = init_observability(config).await?;
println!("✓ Logging initialized\n");
trace!("This is a trace message (very detailed)");
debug!("This is a debug message");
info!("This is an info message");
warn!("This is a warning message");
error!("This is an error message");
println!();
info!(
node_id = "node-1",
session_id = 42,
peer_count = 5,
"Node status update"
);
info!(
message_id = 12345,
size_bytes = 1024,
latency_ms = 42,
"Message processed"
);
for i in 0..5 {
info!(iteration = i, "Processing item");
tokio::time::sleep(tokio::time::Duration::from_millis(500)).await;
}
println!("\nShutting down...");
handle.shutdown().await?;
println!("✓ Logging shut down");
Ok(())
}