Skip to content

Commit 596221f

Browse files
fix order of execution for logging
1 parent e6b9ee1 commit 596221f

3 files changed

Lines changed: 68 additions & 4 deletions

File tree

package.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "zeroeval",
3-
"version": "0.1.10",
3+
"version": "0.1.13",
44
"description": "ZeroEval TypeScript SDK",
55
"keywords": [
66
"observability",
@@ -79,8 +79,7 @@
7979
"example:openai": "npm run build && npx ts-node --esm examples/03-openai.ts",
8080
"example:langchain": "npm run build && npx ts-node --esm examples/04-langchain.ts",
8181
"example:vercel-ai": "npm run build && npx ts-node --esm examples/05-vercel-ai.ts",
82-
"example:signals": "npm run build && npx ts-node --esm examples/06-signals.ts",
83-
"prepublishOnly": "npm run clean && npm run lint && npm run test && npm run build"
82+
"example:signals": "npm run build && npx ts-node --esm examples/06-signals.ts"
8483
},
8584
"peerDependencies": {
8685
"@ai-sdk/openai": "^1.3.22",

src/observability/Tracer.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,12 @@ import { BackendSpanWriter } from './writer';
88
import { setInterval } from 'timers';
99
import { discoverIntegrations } from './integrations/utils';
1010
import type { Integration } from './integrations/base';
11-
import { getLogger } from './logger';
11+
import { getLogger, Logger } from './logger';
12+
13+
// Check for debug mode early
14+
if (process.env.ZEROEVAL_DEBUG?.toLowerCase() === 'true') {
15+
Logger.setDebugMode(true);
16+
}
1217

1318
const logger = getLogger('zeroeval.tracer');
1419

src/observability/logger.ts

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,22 @@ export enum LogLevel {
2424
CRITICAL = 4,
2525
}
2626

27+
// Buffer to store early logs before debug mode is determined
28+
interface BufferedLog {
29+
logger: Logger;
30+
level: LogLevel;
31+
levelName: string;
32+
levelColor: string;
33+
message: string;
34+
args: unknown[];
35+
}
36+
2737
class Logger {
2838
private name: string;
2939
private static globalLevel: LogLevel = LogLevel.WARN;
3040
private static isDebugMode: boolean = false;
41+
private static earlyLogs: BufferedLog[] = [];
42+
private static bufferEarlyLogs: boolean = true;
3143

3244
constructor(name: string) {
3345
this.name = name;
@@ -36,6 +48,28 @@ class Logger {
3648
static setDebugMode(enabled: boolean): void {
3749
Logger.isDebugMode = enabled;
3850
Logger.globalLevel = enabled ? LogLevel.DEBUG : LogLevel.WARN;
51+
52+
// Stop buffering after debug mode is set
53+
Logger.bufferEarlyLogs = false;
54+
55+
// Replay buffered logs if debug mode is enabled
56+
if (enabled && Logger.earlyLogs.length > 0) {
57+
console.log('[zeroeval] Replaying buffered debug logs...');
58+
for (const log of Logger.earlyLogs) {
59+
if (Logger.globalLevel <= log.level) {
60+
const fn = log.level <= LogLevel.INFO ? console.log : console.error;
61+
fn(
62+
log.logger.formatMessage(
63+
log.levelName,
64+
log.levelColor,
65+
log.message
66+
),
67+
...log.args
68+
);
69+
}
70+
}
71+
Logger.earlyLogs = [];
72+
}
3973
}
4074

4175
static isDebugEnabled(): boolean {
@@ -66,12 +100,38 @@ class Logger {
66100
}
67101

68102
debug(message: string, ...args: unknown[]): void {
103+
// Buffer debug logs if we haven't determined debug mode yet
104+
if (Logger.bufferEarlyLogs && LogLevel.DEBUG >= Logger.globalLevel) {
105+
Logger.earlyLogs.push({
106+
logger: this,
107+
level: LogLevel.DEBUG,
108+
levelName: 'DEBUG',
109+
levelColor: colors.blue,
110+
message,
111+
args,
112+
});
113+
return;
114+
}
115+
69116
if (Logger.globalLevel <= LogLevel.DEBUG) {
70117
console.log(this.formatMessage('DEBUG', colors.blue, message), ...args);
71118
}
72119
}
73120

74121
info(message: string, ...args: unknown[]): void {
122+
// Buffer info logs if we haven't determined debug mode yet
123+
if (Logger.bufferEarlyLogs && LogLevel.INFO >= Logger.globalLevel) {
124+
Logger.earlyLogs.push({
125+
logger: this,
126+
level: LogLevel.INFO,
127+
levelName: 'INFO',
128+
levelColor: colors.green,
129+
message,
130+
args,
131+
});
132+
return;
133+
}
134+
75135
if (Logger.globalLevel <= LogLevel.INFO) {
76136
console.log(this.formatMessage('INFO', colors.green, message), ...args);
77137
}

0 commit comments

Comments
 (0)