Files
stats/packages/logger/index.ts
2024-09-13 22:05:25 +02:00

46 lines
1.1 KiB
TypeScript

import * as HyperDX from '@hyperdx/node-opentelemetry';
import winston from 'winston';
export { winston };
export type ILogger = winston.Logger & {
noop: (message: string) => (error: unknown) => void;
};
const logLevel = process.env.LOG_LEVEL ?? 'info';
export function createLogger({ name }: { name: string }): ILogger {
const service = `${name}-${process.env.NODE_ENV ?? 'dev'}`;
const format = process.env.HYPERDX_API_KEY
? winston.format.json()
: winston.format.prettyPrint();
const transports: winston.transport[] = [new winston.transports.Console()];
if (process.env.HYPERDX_API_KEY) {
transports.push(
HyperDX.getWinstonTransport(logLevel, {
detectResources: true,
service,
})
);
}
const logger = winston.createLogger({
defaultMeta: { service },
level: logLevel,
format,
transports,
// Add ISO levels of logging from PINO
levels: Object.assign(
{ fatal: 0, warn: 4, trace: 7 },
winston.config.syslog.levels
),
});
return Object.assign(logger, {
noop: (message: string) => (error: unknown) =>
logger.error(`noop: ${message}`, error),
});
}