29 lines
935 B
TypeScript
29 lines
935 B
TypeScript
/**
|
|
* Structured logger — writes newline-delimited JSON to stdout/stderr.
|
|
* Lightweight alternative to pino for single-file Bun services.
|
|
*/
|
|
|
|
type LogLevel = 'info' | 'warn' | 'error';
|
|
|
|
interface LogEntry {
|
|
level: LogLevel;
|
|
time: string;
|
|
msg: string;
|
|
[key: string]: unknown;
|
|
}
|
|
|
|
function write(stream: typeof process.stdout | typeof process.stderr, entry: LogEntry): void {
|
|
stream.write(JSON.stringify(entry) + '\n');
|
|
}
|
|
|
|
export const logger = {
|
|
info(msg: string, data?: Record<string, unknown>): void {
|
|
write(process.stdout, { level: 'info', time: new Date().toISOString(), msg, ...data });
|
|
},
|
|
warn(msg: string, data?: Record<string, unknown>): void {
|
|
write(process.stderr, { level: 'warn', time: new Date().toISOString(), msg, ...data });
|
|
},
|
|
error(msg: string, data?: Record<string, unknown>): void {
|
|
write(process.stderr, { level: 'error', time: new Date().toISOString(), msg, ...data });
|
|
},
|
|
};
|