All files / plainweb/src log.ts

62.5% Statements 35/56
57.14% Branches 4/7
75% Functions 3/4
62.5% Lines 35/56

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 621x 1x   16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 89x 16x 16x 16x                                             16x 16x 16x 16x 16x 16x 16x   1x 16x 16x 16x 16x 16x 16x   16x 16x   1x  
import { type Config, defaultConfigLogger, expandedConfig } from "config";
import winston from "winston";
 
function consoleFormat(name?: string) {
  return winston.format.combine(
    winston.format.colorize({ all: true }),
    winston.format.align(),
    winston.format.errors({ stack: true }),
    winston.format.timestamp({
      format: "YYYY-MM-DD hh:mm:ss.SSS A",
    }),
    winston.format.padLevels(),
    winston.format.label({ label: name ? name : "" }),
    winston.format.printf(
      ({ timestamp, level, message, label }) =>
        `[${timestamp}] ${level}: [${label}] ${message}`,
    ),
  );
}
 
function getProdLogger(logger: Config["logger"], name?: string) {
  return winston.createLogger({
    level: logger.level,
    format: winston.format.combine(
      winston.format.errors({ stack: true }),
      winston.format.timestamp({
        format: "YYYY-MM-DD hh:mm:ss.SSS A",
      }),
      winston.format.label({ label: name ? name : "" }),
      winston.format.json(),
    ),
    transports: [
      new winston.transports.Console({
        format: consoleFormat(name),
      }),
      new winston.transports.Console(),
      ...logger.transports,
    ],
  });
}
 
function getDevLogger(logger: Pick<Config["logger"], "level">, name?: string) {
  return winston.createLogger({
    level: logger.level,
    format: consoleFormat(name),
    transports: [new winston.transports.Console()],
  });
}
 
export function getLogger(name?: string) {
  const { nodeEnv, logger } = expandedConfig || {
    nodeEnv: "development",
    logger: defaultConfigLogger,
  };
  if (logger?.logger) return logger.logger;
  return nodeEnv === "production"
    ? getProdLogger(logger, name)
    : getDevLogger(logger, name);
}
 
export const log = getLogger("app");