import { Log, ServiceMetadata } from "@superglue/shared";
import EventEmitter from "events";
import pino from "pino";
import { isMainThread, parentPort } from "worker_threads";
export const logEmitter = new EventEmitter();
export const logger = pino({
level: 'debug',
base: { service: 'superglue' },
timestamp: true,
transport: {
target: 'pino-pretty',
options: {
colorize: true,
translateTime: 'SYS:standard',
ignore: 'pid,hostname,service',
messageFormat: '{msg}',
}
}
});
export function logMessage(level: 'info' | 'error' | 'warn' | 'debug', message: string, metadata: ServiceMetadata = { orgId: '' }) {
const logEntry: Log = {
id: crypto.randomUUID(),
message,
level: level.toUpperCase(),
timestamp: new Date(),
traceId: metadata.traceId || '',
orgId: metadata.orgId || ''
};
if (isMainThread) {
logEmitter.emit('log', logEntry);
logger[level](metadata, message);
} else {
parentPort?.postMessage({ type: 'log', payload: logEntry });
}
}