tenantpilot/worker/logging.ts

34 lines
1.1 KiB
TypeScript

function formatPayload(payload: unknown) {
if (typeof payload === 'string') return { msg: payload };
if (payload instanceof Error) return { msg: payload.message, stack: payload.stack };
return payload;
}
const baseMeta = () => ({ pid: process.pid, ts: new Date().toISOString() });
export const logger = {
info: (payload: unknown, meta: Record<string, unknown> = {}) => {
try {
console.log(JSON.stringify({ level: 'info', ...baseMeta(), meta, payload: formatPayload(payload) }));
} catch (e) {
console.log('INFO', payload, meta);
}
},
warn: (payload: unknown, meta: Record<string, unknown> = {}) => {
try {
console.warn(JSON.stringify({ level: 'warn', ...baseMeta(), meta, payload: formatPayload(payload) }));
} catch (e) {
console.warn('WARN', payload, meta);
}
},
error: (payload: unknown, meta: Record<string, unknown> = {}) => {
try {
console.error(JSON.stringify({ level: 'error', ...baseMeta(), meta, payload: formatPayload(payload) }));
} catch (e) {
console.error('ERROR', payload, meta);
}
},
};
export default logger;