From 401c0bf9f572b5ccdba617f68a463021f33642ff Mon Sep 17 00:00:00 2001 From: Sergio Andres Rodriguez Orama Date: Tue, 17 Mar 2026 18:46:32 -0400 Subject: [PATCH] Pass log level via --verbosity flag. Pass log level via --verbosity flag rather than env variable. Example: ``` cargo run --bin simple_device -- --socket-path /tmp/simple_device_1.sock --verbosity debug ``` Bug: b/445229097 --- .../simple_device/src/main.rs | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/base/cvd/cuttlefish/host/commands/vhost_user_media/simple_device/src/main.rs b/base/cvd/cuttlefish/host/commands/vhost_user_media/simple_device/src/main.rs index 479e4245d94..41090d806e9 100644 --- a/base/cvd/cuttlefish/host/commands/vhost_user_media/simple_device/src/main.rs +++ b/base/cvd/cuttlefish/host/commands/vhost_user_media/simple_device/src/main.rs @@ -15,11 +15,12 @@ //! simple_device use std::path::PathBuf; +use std::str::FromStr; use std::sync::{Arc, RwLock}; use std::thread::{JoinHandle, spawn}; use clap::Parser; -use log::error; +use log::{LevelFilter, error}; use thiserror::Error; use vhost_user_backend::VhostUserDaemon; use vhu_media::VhuMediaBackend; @@ -29,6 +30,8 @@ use vm_memory::{GuestMemoryAtomic, GuestMemoryMmap}; #[derive(Debug, Error)] pub(crate) enum Error { + #[error("Failed to parse verbosity level: {0}")] + ParseLevelError(log::ParseLevelError), #[error("Could not create daemon: {0}")] CouldNotCreateDaemon(vhost_user_backend::Error), #[error("Fatal error: {0}")] @@ -43,6 +46,9 @@ struct CmdLineArgs { /// Location of vhost-user Unix domain socket. #[clap(short, long, value_name = "SOCKET")] socket_path: PathBuf, + /// Log verbosity, one of Off, Error, Warning, Info, Debug, Trace. + #[clap(short, long, default_value_t = String::from("Debug") )] + verbosity: String, } #[derive(PartialEq, Debug)] @@ -60,10 +66,17 @@ impl TryFrom for Config { } } +fn init_logging(verbosity: &str) -> Result<()> { + env_logger::builder() + .format_timestamp_secs() + .filter_level(LevelFilter::from_str(verbosity).map_err(Error::ParseLevelError)?) + .init(); + Ok(()) +} + const VFL_TYPE_VIDEO: u32 = 0; -fn start_backend(args: CmdLineArgs) -> Result<()> { - let config = Config::try_from(args)?; +fn start_backend(config: Config) -> Result<()> { let socket_path = config.socket_path.clone(); let handle: JoinHandle> = spawn(move || { loop { @@ -96,7 +109,9 @@ fn start_backend(args: CmdLineArgs) -> Result<()> { } fn main() -> Result<()> { - env_logger::init(); + let args = CmdLineArgs::parse(); + + init_logging(&args.verbosity)?; - start_backend(CmdLineArgs::parse()) + start_backend(Config::try_from(args)?) }