Spaces:
Sleeping
Sleeping
File size: 1,720 Bytes
521a9b6 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | /** Structured logger with worker context */
type LogLevel = 'info' | 'warn' | 'error' | 'debug';
interface LogEntry {
level: LogLevel;
ts: string;
worker?: string;
job?: string;
account?: string;
step?: string;
msg: string;
[key: string]: unknown;
}
let globalWorkerId = 'unknown';
export function setWorkerId(id: string): void {
globalWorkerId = id;
}
function write(level: LogLevel, msg: string, extra?: Record<string, unknown>): void {
const entry: LogEntry = {
level,
ts: new Date().toISOString(),
worker: globalWorkerId,
msg,
...extra,
};
const line = JSON.stringify(entry);
if (level === 'error') {
process.stderr.write(line + '\n');
} else {
process.stdout.write(line + '\n');
}
}
export const logger = {
info: (msg: string, extra?: Record<string, unknown>) => write('info', msg, extra),
warn: (msg: string, extra?: Record<string, unknown>) => write('warn', msg, extra),
error: (msg: string, extra?: Record<string, unknown>) => write('error', msg, extra),
debug: (msg: string, extra?: Record<string, unknown>) => write('debug', msg, extra),
/** Create a child logger with preset context fields */
child(context: Record<string, unknown>) {
return {
info: (msg: string, extra?: Record<string, unknown>) =>
write('info', msg, { ...context, ...extra }),
warn: (msg: string, extra?: Record<string, unknown>) =>
write('warn', msg, { ...context, ...extra }),
error: (msg: string, extra?: Record<string, unknown>) =>
write('error', msg, { ...context, ...extra }),
debug: (msg: string, extra?: Record<string, unknown>) =>
write('debug', msg, { ...context, ...extra }),
};
},
};
|