robonix_api.scribe_logger¶
scribe_logger — Python-side unified logging facade.
Mirrors system/scribe/src/lib.rs semantics: single log() entry
point, lazy init, dual sink (stderr + per-tag JSON-lines file).
Usage:
from robonix_api import scribe_logger
scribe_logger.info("atlas", "control plane ready")
scribe_logger.log(scribe_logger.Level.WARN, "my_driver", "sensor timeout")
Functions
|
Convenience: |
|
Convenience: |
|
Convenience: |
|
Route stdlib |
|
Log one record — the only entry point. |
|
Convenience: |
Classes
|
Severity, ordered DEBUG < INFO < WARN < ERROR. |
- class robonix_api.scribe_logger.Level(*values)[source]¶
Bases:
EnumSeverity, ordered DEBUG < INFO < WARN < ERROR.
- DEBUG = 'D'¶
- ERROR = 'E'¶
- INFO = 'I'¶
- WARN = 'W'¶
- robonix_api.scribe_logger.debug(tag: str, msg: str) None[source]¶
Convenience:
Level.DEBUG.
- robonix_api.scribe_logger.error(tag: str, msg: str) None[source]¶
Convenience:
Level.ERROR.
- robonix_api.scribe_logger.info(tag: str, msg: str) None[source]¶
Convenience:
Level.INFO.
- robonix_api.scribe_logger.install_stdlib_bridge(tag: str, *, level: int = 20, logger: Logger | None = None, replace_existing_handlers: bool = True) Logger[source]¶
Route stdlib
loggingthrough Scribe so packages need no own sink.Attaches a
_StdlibBridgeHandler(tagged tag) to logger (the root logger by default, so transitive-dependency logs are captured too) and raises its level to level. When replace_existing_handlers is true, every other handler already on that logger —StreamHandler(stdout/ stderr),FileHandler(a per-package log file), arichhandler from fastmcp/uvicorn, anything — is removed first, so the bridge is the only sink. This enforces the repo rule “no package owns a log file or duplicate stdout sink; everything goes through Scribe” (Scribe already mirrors to stderr itself, so console output is not lost).Idempotent and re-taggable: exactly one bridge handler ever exists on the logger, and the most recent call’s tag wins (so the framework can re-tag with the provider id at bootstrap after a package set a provisional tag at import). Returns the configured logger.
- robonix_api.scribe_logger.log(level: Level, tag: str, msg: str) None[source]¶
Log one record — the only entry point.
The first call transparently creates
$SCRIBE_LOG_DIR(default./logs). Errors are best-effort (stderr / disk full are silently ignored).
- robonix_api.scribe_logger.warn(tag: str, msg: str) None[source]¶
Convenience:
Level.WARN.