Skip to content

feat(serve): Add --verbose flag for request/response payload logging #152

@noahgift

Description

@noahgift

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

  1. Wire the global --verbose flag through to ServerConfig
  2. Add tower-http TraceLayer middleware for request/response logging
  3. 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

  • apr -v serve model.gguf logs incoming request bodies
  • apr -v serve model.gguf logs outgoing response bodies
  • RUST_LOG=debug apr serve model.gguf provides detailed tracing
  • Payload logging respects size limits (don't log multi-MB audio files)

Related

  • X-Trace-Level header for inference tracing (already implemented)
  • crates/apr-cli/examples/serve_with_tracing.rs

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions