docs: update README logging section for logging-module migration
The write-up still described the old print()-mirroring behavior; recent commits (a1864a5..9f262c4) routed task/component output through self.log (stdlib logging) instead, added Sud lifecycle/connect-state log lines, and gave SudForecastEstimator its own silenced logger. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01F4oEE99rkKVU8L8tkzXWdG
This commit is contained in:
@@ -771,10 +771,27 @@ session - don't assume they're a matched pair unless you've just watched a
|
|||||||
run finish (`log_latest_sud.json` is only ever current *immediately* after
|
run finish (`log_latest_sud.json` is only ever current *immediately* after
|
||||||
a `Stop`/`DONE`).
|
a `Stop`/`DONE`).
|
||||||
|
|
||||||
`server/brewpi.py` also mirrors everything it prints (every component's
|
`server/brewpi.py` also mirrors console output to a plain text log,
|
||||||
`print()`-based status/debug output) to a plain text log,
|
`logs/brewpi.<timestamp>.log` (plus an always-truncated `logs/brewpi.latest.log`
|
||||||
`logs/brewpi.<timestamp>.log`, alongside those JSON logs - useful for
|
for tail-style consumers), alongside those JSON logs - useful for post-mortems
|
||||||
post-mortems without needing to have been watching the console live.
|
without needing to have been watching the console live. Every task/component
|
||||||
|
logs through the stdlib `logging` module rather than `print()`: `AttributeChange`
|
||||||
|
(`utils/value.py`, the common base of every `ATask` and component ABC) gives
|
||||||
|
each one a `self.log = logging.getLogger(type(self).__name__)`, so messages
|
||||||
|
are automatically tagged with the component's class name with no hand-typing
|
||||||
|
needed. `server/brewpi.py`'s `Tee` class mirrors `stdout`/`stderr` to both log
|
||||||
|
files and stamps each line with a `<date>T<time>:` prefix; `logging.basicConfig()`
|
||||||
|
uses a bare `%(name)s:%(message)s` formatter, so the combined line reads
|
||||||
|
`<date>T<time>:<component>:<message>` without double-stamping (and third-party
|
||||||
|
loggers like `websockets`/`asyncio` get the same formatting for free).
|
||||||
|
`components/sud.py`'s `Sud` logs its own lifecycle (load/start/pause/continue/
|
||||||
|
stop, each step's `"<descr>(<number>) Heating"`/`"Reached"` transitions,
|
||||||
|
waiting for user interaction, finished), and `HeaterTask`/`StirrerTask` log
|
||||||
|
connected/disconnected state. `SudForecastEstimator` drives its own throwaway
|
||||||
|
`Sud` through an entire schedule with no real waiting to predict duration, so
|
||||||
|
it's given its own `"SudForecastEstimator"` logger (silenced to `WARNING` by
|
||||||
|
default in `components/sud_forecast.py`) rather than sharing `Sud`'s, keeping
|
||||||
|
an instant internal forecast run out of the log next to actual brew activity.
|
||||||
|
|
||||||
Both JSON logs also carry `dt`, the effective `SimWarpFactor` (already
|
Both JSON logs also carry `dt`, the effective `SimWarpFactor` (already
|
||||||
clamped to `1.0` for real hardware - see above), `Config` (the whole
|
clamped to `1.0` for real hardware - see above), `Config` (the whole
|
||||||
|
|||||||
Reference in New Issue
Block a user