import { createEventLogger, createLogger } from "@shared/common/logging"; import { isHttpError } from "@shared/common/async_utils"; import { HTTPError } from "got/dist/source"; import { MongoDB } from "winston-mongodb"; import { QueryOptions } from "winston"; // Workaround for https://github.com/winstonjs/winston-mongodb/issues/168 MongoDB.prototype.normalizeQuery = (opts?: Record) : QueryOptions => { const result = opts ?? {}; result.rows = result.rows ?? result.limit ?? 10; result.start = result.start ?? 0; result.until = result.until ?? new Date(); if (typeof result.until !== "object") { result.until = new Date(result.until as unknown as Date); } result.from = result.from ?? ((result.until as unknown as number) - (24 * 60 * 60 * 1000)); if (typeof result.from !== "object") { result.from = new Date(result.from as unknown as Date); } result.order = result.order ?? "desc"; return result as unknown as QueryOptions; }; export const logger = createLogger({ errorHandler: (reason) => { if (isHttpError(reason)) { return new Error(`HTTPError: ${reason.request.requestUrl} failed because ${reason}\nStack trace: ${reason.stack}`); } return undefined; }, }); export const LOGGER_NAME = "WEB"; export const eventLogger = createEventLogger({ host: process.env.MONGO_DB_HOST ?? "", password: process.env.MONGO_DB_USERNAME ?? "", username: process.env.MONGO_DB_PASSWORD ?? "", name: LOGGER_NAME, });