diff --git a/lib/logger.js b/lib/logger.js index 331c6636..dedc0c9a 100644 --- a/lib/logger.js +++ b/lib/logger.js @@ -41,36 +41,41 @@ const logLevel = process.env.NODE_ENV === 'test' ? CONSTANTS.LOG_LEVEL_NONE : process.env.LOG_LEVEL || config.logger.level; -module.exports = (() => { - const isDev = process.env.NODE_ENV === 'development'; - const format = isDev ? - Winston.format.combine( - Winston.format.colorize({ all: true }), - Winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), - Winston.format.splat(), - Winston.format.printf(info => { - const { requestId, clientId } = getContext(); +const injectContext = Winston.format((info) => { + const { requestId, clientId, version } = getContext(); + info.requestId = requestId || null; + info.clientId = clientId || null; + info.version = version || null; - return `${info.timestamp} ${info.level} [${requestId || '-'}] [${clientId || '-'}]: ${info.message}`; - }) - ) : - Winston.format.combine( - Winston.format.splat(), - Winston.format.printf(info => { - const { requestId, clientId } = getContext(); + return info; +}); - return `[${requestId || '-'}] [${clientId || '-'}] ${info.message}`; - }) - ); +const devFormat = Winston.format.combine( + Winston.format.colorize({ all: true }), + Winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), + Winston.format.splat(), + injectContext(), + Winston.format.printf(info => { + const ctx = [info.requestId, info.clientId, info.version] + .map(v => v || '-') + .join(' | '); - return Winston.createLogger( - { - level: logLevelName(logLevel), - levels: myCustomLevels.levels, - format, - transports: [ - new Winston.transports.Console() - ] - } - ); -})(); + return `${info.timestamp} ${info.level} [${ctx}] ${info.message}`; + }) +); + +const prodFormat = Winston.format.combine( + Winston.format.timestamp(), + Winston.format.splat(), + injectContext(), + Winston.format.json() +); + +module.exports = Winston.createLogger({ + level: logLevelName(logLevel), + levels: myCustomLevels.levels, + format: process.env.NODE_ENV === 'development' ? devFormat : prodFormat, + transports: [ + new Winston.transports.Console() + ] +}); diff --git a/lib/requestContext.ts b/lib/requestContext.ts index 1adba15e..c41b58a3 100644 --- a/lib/requestContext.ts +++ b/lib/requestContext.ts @@ -3,6 +3,7 @@ import { AsyncLocalStorage } from 'async_hooks'; interface RequestContext { requestId: string; clientId: string | undefined; + version: string | undefined; } const store = new AsyncLocalStorage(); diff --git a/lib/server/middleware/requestLogger.ts b/lib/server/middleware/requestLogger.ts index 28ba78a5..7d041c21 100644 --- a/lib/server/middleware/requestLogger.ts +++ b/lib/server/middleware/requestLogger.ts @@ -15,6 +15,7 @@ export function requestLogger(req: Request, res: Response, next: NextFunction): const ctx = { requestId: uuidv4(), clientId: req.headers['internxt-client'] as string | undefined, + version: req.headers['internxt-version'] as string | undefined, }; requestContextStore.run(ctx, () => {