Summary
The apr serve command lacks verbose logging for HTTP request/response payloads, making debugging difficult.
Current State
- The CLI has a global
-v/--verbose flag (src/main.rs:51)
- The
Serve command doesn't pass cli.verbose to the server config (src/main.rs:942-962)
- No request/response logging middleware in the axum router
Proposed Solution
- Wire the global
--verbose flag through to ServerConfig
- Add tower-http
TraceLayer middleware for request/response logging
- Support
RUST_LOG environment variable for fine-grained control
Implementation Details
// In serve.rs - add tracing middleware
use tower_http::trace::TraceLayer;
let app = Router::new()
.route("/health", get(health_handler))
// ... other routes
.layer(TraceLayer::new_for_http()); // Add this
// In main.rs - pass verbose to config
Commands::Serve { ... } => {
let config = serve::ServerConfig {
verbose: cli.verbose, // Add this
// ...
};
}
Acceptance Criteria
Related
- X-Trace-Level header for inference tracing (already implemented)
crates/apr-cli/examples/serve_with_tracing.rs
Summary
The
apr servecommand lacks verbose logging for HTTP request/response payloads, making debugging difficult.Current State
-v/--verboseflag (src/main.rs:51)Servecommand doesn't passcli.verboseto the server config (src/main.rs:942-962)Proposed Solution
--verboseflag through toServerConfigTraceLayermiddleware for request/response loggingRUST_LOGenvironment variable for fine-grained controlImplementation Details
Acceptance Criteria
apr -v serve model.gguflogs incoming request bodiesapr -v serve model.gguflogs outgoing response bodiesRUST_LOG=debug apr serve model.ggufprovides detailed tracingRelated
crates/apr-cli/examples/serve_with_tracing.rs