use composio_sdk::{
setup_logging, setup_logging_from_env, set_verbosity, truncate_message,
LogLevel, Verbosity, WithLogger,
};
struct MyService {
name: String,
}
impl WithLogger for MyService {
fn logger_name(&self) -> &str {
&self.name
}
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("🔍 Composio SDK Logging Examples\n");
println!("1️⃣ Basic Setup");
setup_logging(LogLevel::Debug);
println!(" ✅ Logging configured with Debug level\n");
println!("2️⃣ Environment-based Setup");
println!(" Set COMPOSIO_LOGGING_LEVEL=debug");
println!(" Set COMPOSIO_LOG_VERBOSITY=2");
setup_logging_from_env();
println!(" ✅ Logging configured from environment\n");
println!("3️⃣ Verbosity Levels");
for verbosity in [
Verbosity::Minimal,
Verbosity::Normal,
Verbosity::Verbose,
Verbosity::Full,
] {
set_verbosity(verbosity);
let max_size = verbosity
.max_line_size()
.map(|s| s.to_string())
.unwrap_or_else(|| "unlimited".to_string());
println!(" {:?}: max {} chars", verbosity, max_size);
}
println!();
println!("4️⃣ Message Truncation");
set_verbosity(Verbosity::Minimal);
let short_msg = "Short message";
let long_msg = "a".repeat(300);
println!(" Short message: {}", truncate_message(short_msg));
println!(" Long message (300 chars): {}", truncate_message(&long_msg));
println!(" Truncated to: {} chars\n", truncate_message(&long_msg).len());
println!("5️⃣ WithLogger Trait");
let service = MyService {
name: "my_service".to_string(),
};
println!(" Logger name: {}", service.logger_name());
service.log_info("This is an info message");
service.log_debug("This is a debug message");
service.log_warning("This is a warning message");
service.log_error("This is an error message");
println!(" ✅ Messages logged (check output with --features local-debug)\n");
println!("6️⃣ Verbosity Impact on Truncation");
let test_msg = "x".repeat(600);
for verbosity in [
Verbosity::Minimal,
Verbosity::Normal,
Verbosity::Verbose,
Verbosity::Full,
] {
set_verbosity(verbosity);
let truncated = truncate_message(&test_msg);
println!(
" {:?}: {} chars -> {} chars",
verbosity,
test_msg.len(),
truncated.len()
);
}
println!();
println!("7️⃣ Log Level Parsing");
for level_str in ["debug", "info", "warning", "error"] {
if let Some(level) = LogLevel::from_str(level_str) {
println!(" '{}' -> {:?}", level_str, level);
}
}
println!();
println!("✨ All examples completed!");
println!("\n💡 Tips:");
println!(" - Use COMPOSIO_LOGGING_LEVEL to set log level");
println!(" - Use COMPOSIO_LOG_VERBOSITY (0-3) to control truncation");
println!(" - Enable 'local-debug' feature for actual logging output");
println!(" - Implement WithLogger trait for custom types");
Ok(())
}