bugfixes 0.1.0

Rust logging client for Bugfixes with optional remote reporting
Documentation

bugfixes

Rust logging client for Bugfixes, extracted from the behavior of the Go logs package in this repository.

Current scope:

  • local log output
  • caller file/line capture
  • level filtering
  • optional remote reporting to POST /log
  • optional panic/bug reporting to POST /bug
  • error/fatal helpers

Not ported yet:

  • Go HTTP middleware utilities
  • framework-specific integrations

Install

[dependencies]
bugfixes = "0.1.0"

Example

use bugfixes::{BugfixesLogger, init_global_local, local_logger};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let logger = BugfixesLogger::local()?;
    let line = logger.info("server started on :3000")?;
    assert_eq!(line, "Info: server started on :3000");

    let local_line = local_logger().info("stdout only")?;
    assert_eq!(local_line, "Info: stdout only");

    init_global_local()?;
    let line = bugfixes::info!("server started on {}", ":3000")?;
    assert_eq!(line, "Info: server started on :3000");

    Ok(())
}

Use BugfixesLogger::from_env() to enable remote reporting through:

  • BUGFIXES_AGENT_KEY
  • BUGFIXES_AGENT_SECRET
  • BUGFIXES_LOG_LEVEL
  • BUGFIXES_LOCAL_ONLY
  • BUGFIXES_SERVER

Panic capture is available either explicitly:

let logger = BugfixesLogger::from_env()?;
let _ = logger.report_panic_payload(&"worker crashed");

or through a global hook:

bugfixes::init_global_from_env()?;
bugfixes::install_global_panic_hook();

API shape

The crate supports both:

  • explicit logger instances, which are best for libraries and dependency injection
  • global macros, which are the most idiomatic application-facing Rust API
  • local_logger(), which is the direct local-only equivalent of Go's logs.Local()

The macros preserve the Go package's functional intent while fitting normal Rust call patterns:

bugfixes::debug!("loaded {}", 3);
bugfixes::info!("started");
bugfixes::warn!("slow request");
bugfixes::error!("db error: {}", "timeout")?;