server/log.ts (36 lines of code) (raw):

import { createLogger, format, transports } from 'winston'; import { putMetricDataPromise } from './awsIntegration'; import { conf, Environments } from './config'; const location = conf.ENVIRONMENT === Environments.AWS ? '/var/log/' : './'; export const log = createLogger({ level: 'info', format: format.json(), transports: [ new transports.File({ filename: `${location}/manage-frontend.log`, }), new transports.Console({ format: format.simple() }), ], }); interface MetricLoggingFields { loggingCode: string; isOK: boolean; } export const putMetric = (fields: MetricLoggingFields) => { if (process.env.RUNNING_IN_CYPRESS === 'true') { return; } const dimensions = { Stage: conf.STAGE, outcome: fields.isOK ? 'SUCCESS' : 'ERROR', }; if (fields.loggingCode) { putMetricDataPromise(fields.loggingCode, dimensions).catch((error) => log.error('Failed to putMetricData', { metricName: fields.loggingCode, dimensions, error, }), ); } };