import { getGatewayTransport, getStatusDataGenerator, } from "@t9tlai/host-runner-utils"; import express, { RequestHandler } from "express"; import expressWinston from "express-winston"; import winston from "winston"; import * as Transport from "winston-transport"; import thisPackage from "../utils/thisPackage"; console.log(thisPackage.name); console.log(thisPackage.version); const httpTransport = getGatewayTransport(); const getStatusData = getStatusDataGenerator(thisPackage); /* eslint-disable no-param-reassign */ const appendAboutData = winston.format((info) => { info.about = getStatusData(); return info; }); const format = winston.format.combine( appendAboutData(), winston.format.simple(), winston.format.splat(), winston.format.timestamp(), winston.format.json() ); const transports: Transport[] = httpTransport ? [httpTransport] : []; if (process.env.NODE_ENV !== "production") { transports.push( new winston.transports.Console({ format: winston.format.colorize(), }) ); } export function setupWinston(app: express.Application): void { app.use( expressWinston.logger({ transports, format, meta: true, requestField: null, dynamicMeta: (req) => ({ user: req.user, params: req.params, headers: { ...req.headers, authorization: undefined }, httpVersion: req.httpVersion, method: req.method, originalUrl: req.originalUrl, query: req.query, url: req.url, }), }) ); } export const logger = winston.createLogger({ transports, format, }); export function winstonRequestLogger(): RequestHandler { return (req, _res, next) => { req.logger = logger; next(); }; }