From 1ba2b14e3f6089ea65b45696eeb7899e29eb7054 Mon Sep 17 00:00:00 2001 From: rneiva <22941237+0xPuncker@users.noreply.github.com> Date: Sun, 17 May 2026 19:08:26 +0200 Subject: [PATCH 1/2] fix(proxy): make LOG_LEVEL from .env.docker authoritative and surface startup state via logger --- docker-compose.yml | 1 - src/index.ts | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index ea53f91..975f299 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,7 +14,6 @@ services: - API_STREAMING_TIMEOUT_MS=${API_STREAMING_TIMEOUT_MS:-18000000} - API_MAX_RETRIES=${API_MAX_RETRIES:-5} - API_RETRY_DELAY_MS=${API_RETRY_DELAY_MS:-2000} - - LOG_LEVEL=${LOG_LEVEL:-info} - NODE_ENV=${NODE_ENV:-production} - CLAUDE_CREDENTIALS_PATH=/app/credentials.json - DATABASE_URL=postgresql://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@${DB_HOST:-cc-db}:5432/${POSTGRES_DB:-claude_proxy} diff --git a/src/index.ts b/src/index.ts index fa56dd9..6c2fbdc 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2320,6 +2320,8 @@ es.onerror = () => { public async start(): Promise { const port = this.config.port; + this.logger.info(`Logger initialized at level=${this.config.logLevel}`); + // Initialize database if tracking is enabled if (this.usageTracker.isTrackingEnabled()) { try { @@ -2333,6 +2335,7 @@ es.onerror = () => { this.server.listen(port, "0.0.0.0", () => { this.printStartupBanner(port); + this.logger.ok(`Server listening on 0.0.0.0:${port} (level=${this.config.logLevel})`); }); } From 3ea83b19b54adda8128efa97356335ad40220a38 Mon Sep 17 00:00:00 2001 From: rneiva <22941237+0xPuncker@users.noreply.github.com> Date: Sun, 17 May 2026 19:18:15 +0200 Subject: [PATCH 2/2] feat(observability): surface usage tracking state and per-request tracking outcomes via logger --- src/index.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/index.ts b/src/index.ts index 6c2fbdc..1f02bc9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1718,7 +1718,12 @@ export class ClaudeCodeProxy { tokenUsage: tokenUsage || undefined, }; - await this.usageTracker.trackRequest(method, path, metrics); + const trackedId = await this.usageTracker.trackRequest(method, path, metrics); + if (trackedId !== null) { + this.logger.debug(`tracked: id=${trackedId} provider=${provider} status=${statusCode} duration=${duration}ms`); + } else { + this.logger.warn(`tracking write returned null — DB unreachable or insert failed (provider=${provider} status=${statusCode})`); + } } /** @@ -1757,7 +1762,12 @@ export class ClaudeCodeProxy { tokenUsage: tokenUsage || undefined, }; - await this.usageTracker.trackRequest(method, path, metrics); + const trackedId = await this.usageTracker.trackRequest(method, path, metrics); + if (trackedId !== null) { + this.logger.debug(`tracked: id=${trackedId} provider=${provider} status=${statusCode} duration=${duration}ms`); + } else { + this.logger.warn(`tracking write returned null — DB unreachable or insert failed (provider=${provider} status=${statusCode})`); + } } /** @@ -2321,6 +2331,7 @@ es.onerror = () => { const port = this.config.port; this.logger.info(`Logger initialized at level=${this.config.logLevel}`); + this.logger.info(`Usage tracking enabled=${this.usageTracker.isTrackingEnabled()}`); // Initialize database if tracking is enabled if (this.usageTracker.isTrackingEnabled()) { @@ -2331,6 +2342,8 @@ es.onerror = () => { this.logger.error("Failed to initialize database tracking"); this.logger.error("Continuing without database tracking..."); } + } else { + this.logger.warn("Usage tracking disabled — DATABASE_URL not set, /usage will return empty"); } this.server.listen(port, "0.0.0.0", () => {