Skip to content
Logger.ts 1.04 KiB
Newer Older
import winston, { format } from "winston";
Grant's avatar
Grant committed
import { createEnum } from "./utils";
Grant's avatar
Grant committed
const formatter = format.printf((options) => {
  let maxModuleWidth = 0;
  for (const module of Object.values(LoggerType)) {
    maxModuleWidth = Math.max(maxModuleWidth, `[${module}]`.length);
  }

  let modulePadding = " ".repeat(
    Math.max(0, maxModuleWidth - `[${options.moduleName}]`.length)
  );

  let parts: string[] = [
    options.timestamp + `  [${options.moduleName || "---"}]` + modulePadding,
    options.level + ":",
    options.message,
  ];

  return parts.join("\t");
});

const Winston = winston.createLogger({
  level: process.env.LOG_LEVEL || "info",
Grant's avatar
Grant committed
  format: format.combine(format.timestamp(), formatter),
  transports: [new winston.transports.Console()],
});
Grant's avatar
Grant committed

export const LoggerType = createEnum([
  "MAIN",
  "SETTINGS",
  "CANVAS",
  "HTTP",
  "HTTP/ADMIN",
  "HTTP/CLIENT",
  "REDIS",
  "SOCKET",
  "JOB_WORKER",
  "CANVAS_WORK",
  "WORKER_ROOT",
Grant's avatar
Grant committed
]);

export const getLogger = (module?: keyof typeof LoggerType) =>
  Winston.child({ moduleName: module });