mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-26 20:35:39 -06:00
fix(agents): restore model-fetch info logs (#89648)
* fix(agents): restore model-fetch info logs * docs(logging): document [model-fetch] default info-level visibility [model-fetch] response metadata is always emitted at info level regardless of OPENCLAW_DEBUG_MODEL_TRANSPORT, so users see basic model transport hygiene (provider, API, model, status, latency) without needing debug flags. * docs(logging): clarify model-fetch start metadata visibility
This commit is contained in:
@@ -210,6 +210,12 @@ These flags log through normal OpenClaw logging, so `openclaw logs --follow`
|
||||
and the Control UI Logs tab show them. Without the flags, the same diagnostics
|
||||
remain available at `debug` level.
|
||||
|
||||
`[model-fetch]` start and response metadata (provider, API, model, status,
|
||||
latency, and request fields such as method, URL, timeout, proxy, and policy)
|
||||
is always emitted at `info` level regardless of
|
||||
`OPENCLAW_DEBUG_MODEL_TRANSPORT`, so basic model transport hygiene is visible
|
||||
without debug flags.
|
||||
|
||||
### Trace correlation
|
||||
|
||||
File logs are JSONL. When a log call carries a valid diagnostic trace context,
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import { emitModelTransportDebug } from "./model-transport-debug.js";
|
||||
|
||||
describe("emitModelTransportDebug", () => {
|
||||
function createLogger() {
|
||||
return {
|
||||
info: vi.fn(),
|
||||
debug: vi.fn(),
|
||||
} as unknown as Parameters<typeof emitModelTransportDebug>[0];
|
||||
}
|
||||
|
||||
it("emits model-fetch metadata at info level by default", () => {
|
||||
const log = createLogger();
|
||||
|
||||
emitModelTransportDebug(
|
||||
log,
|
||||
"[model-fetch] response provider=openai api=chat model=gpt status=200 latencyMs=42",
|
||||
);
|
||||
|
||||
expect(log.info).toHaveBeenCalledWith(
|
||||
"[model-fetch] response provider=openai api=chat model=gpt status=200 latencyMs=42",
|
||||
);
|
||||
expect(log.debug).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("keeps non-model-fetch transport diagnostics at debug level by default", () => {
|
||||
const log = createLogger();
|
||||
|
||||
emitModelTransportDebug(log, "[model-sse] event type=response.output_text.delta");
|
||||
|
||||
expect(log.debug).toHaveBeenCalledWith("[model-sse] event type=response.output_text.delta");
|
||||
expect(log.info).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
@@ -68,9 +68,13 @@ function isModelTransportDebugEnabled(env: ModelTransportDebugEnv = process.env)
|
||||
);
|
||||
}
|
||||
|
||||
/** Emits transport diagnostics at info level only when debug env explicitly enables them. */
|
||||
function isModelFetchMetadataMessage(message: string): boolean {
|
||||
return message.startsWith("[model-fetch]");
|
||||
}
|
||||
|
||||
/** Emits model-fetch metadata at info level by default; other diagnostics require debug env. */
|
||||
export function emitModelTransportDebug(log: SubsystemLogger, message: string): void {
|
||||
if (isModelTransportDebugEnabled()) {
|
||||
if (isModelFetchMetadataMessage(message) || isModelTransportDebugEnabled()) {
|
||||
log.info(message);
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user