Skip to main content

bee/debug/
loggers.rs

1//! `/loggers` endpoints — list, query by expression, set verbosity.
2//! Mirrors bee-go's `pkg/debug/loggers.go`.
3
4use base64::Engine;
5use base64::engine::general_purpose::STANDARD;
6use reqwest::Method;
7use serde::Deserialize;
8
9use crate::client::request;
10use crate::swarm::Error;
11
12use super::DebugApi;
13
14/// One logger row in [`LoggerListing`].
15#[derive(Clone, Debug, PartialEq, Eq, Deserialize)]
16pub struct Logger {
17    /// Fully qualified logger name.
18    pub logger: String,
19    /// Verbosity level (`"info"`, `"debug"`, `"warning"`, …).
20    pub verbosity: String,
21    /// Subsystem the logger belongs to.
22    pub subsystem: String,
23    /// Stable logger ID (base64).
24    pub id: String,
25}
26
27/// `GET /loggers` and `GET /loggers/{expr}` response. The `tree`
28/// payload is recursive and rarely needed — it is preserved as a raw
29/// JSON value.
30#[derive(Clone, Debug, PartialEq, Eq, Deserialize)]
31pub struct LoggerListing {
32    /// Recursive logger tree as raw JSON.
33    #[serde(default)]
34    pub tree: serde_json::Value,
35    /// Flat list of registered loggers.
36    #[serde(default)]
37    pub loggers: Vec<Logger>,
38}
39
40impl DebugApi {
41    /// `GET /loggers` — every logger registered in the running node.
42    pub async fn loggers(&self) -> Result<LoggerListing, Error> {
43        let builder = request(&self.inner, Method::GET, "loggers")?;
44        self.inner.send_json(builder).await
45    }
46
47    /// `GET /loggers/{base64(expression)}` — loggers matching the
48    /// regex / subsystem expression. The expression is base64-encoded
49    /// per the Bee `/loggers/{exp}` contract.
50    pub async fn loggers_by_expression(&self, expression: &str) -> Result<LoggerListing, Error> {
51        let enc = STANDARD.encode(expression.as_bytes());
52        let path = format!("loggers/{enc}");
53        let builder = request(&self.inner, Method::GET, &path)?;
54        self.inner.send_json(builder).await
55    }
56
57    /// `PUT /loggers/{base64(expression)}` — set verbosity for loggers
58    /// matching the expression.
59    pub async fn set_logger_verbosity(&self, expression: &str) -> Result<(), Error> {
60        let enc = STANDARD.encode(expression.as_bytes());
61        let path = format!("loggers/{enc}");
62        let builder = request(&self.inner, Method::PUT, &path)?;
63        self.inner.send(builder).await?;
64        Ok(())
65    }
66}