diff --git a/src/commands/start/curio/daemon.rs b/src/commands/start/curio/daemon.rs index 1250ba3e..7a7d80bf 100644 --- a/src/commands/start/curio/daemon.rs +++ b/src/commands/start/curio/daemon.rs @@ -248,5 +248,8 @@ fn build_docker_create_args( docker_args.extend_from_slice(&["-e".to_string(), env.clone()]); } + docker_args.push("-e".to_string()); + docker_args.push(crate::constants::CURIO_LOG_LEVEL.to_string()); + Ok(docker_args) } diff --git a/src/commands/start/curio/db_setup.rs b/src/commands/start/curio/db_setup.rs index b89fc501..abd1bbb2 100644 --- a/src/commands/start/curio/db_setup.rs +++ b/src/commands/start/curio/db_setup.rs @@ -201,6 +201,9 @@ fn create_base_cluster( docker_args.push(env); } + docker_args.push("-e"); + docker_args.push(crate::constants::CURIO_LOG_LEVEL); + // Add image and command let bash_cmd = format!( "sleep 3 && /usr/local/bin/lotus-bins/curio config new-cluster {}", @@ -311,6 +314,9 @@ fn create_pdp_layer(context: &SetupContext, sp_index: usize) -> Result<(), Box Result> { /// Get logs from a Docker container. /// +/// Collects both stdout and stderr. Go programs (e.g. Curio) +/// write all log output to stderr, so both streams must be collected to get complete +/// logs. +/// /// # Arguments /// * `container_name` - The name of the container to get logs from /// /// # Returns -/// The container logs on success. +/// The combined stdout + stderr container logs on success. pub fn get_container_logs(container_name: &str) -> Result> { let output = docker_command(&["logs", container_name])?; - Ok(String::from_utf8_lossy(&output.stdout).to_string()) + + let mut logs = String::new(); + let stdout_str = String::from_utf8_lossy(&output.stdout); + let stderr_str = String::from_utf8_lossy(&output.stderr); + logs.push_str(&stdout_str); + if !stdout_str.is_empty() + && !stderr_str.is_empty() + && !stdout_str.ends_with('\n') + && !stderr_str.starts_with('\n') + { + logs.push('\n'); + } + logs.push_str(&stderr_str); + Ok(logs) } /// Check if a port is available (not in use)