@lexamica-modules/logger
Version:
The various loggers and transports used for API logging in the Lexamica Eco-system
37 lines (35 loc) • 901 B
text/typescript
import morgan from 'morgan';
import { isDevelopment } from './environment';
import { requestFormatter } from './formatting';
import winston from 'winston';
export function createLoggerMiddleware({
logger,
format,
environment,
}: {
logger: winston.Logger;
format: string;
environment: string;
}) {
if (logger && !!logger.info) {
return morgan(
isDevelopment(environment) ? 'short' : format ?? requestFormatter,
{
stream: {
write: (message) => {
try {
const data = JSON.parse(message);
logger.http(data);
} catch (err) {
logger.info(message);
}
},
},
}
);
} else {
throw new Error(
'You must pass in a winston logger instance (as a named argument, logger) to create logging middleware.'
);
}
}