46 lines
1.1 KiB
TypeScript
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),
|
|
});
|
|
}
|