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 62 | 1x 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"); |