All files / src/utils logger.ts

76.47% Statements 13/17
60% Branches 6/10
50% Functions 1/2
76.47% Lines 13/17

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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 851x                                                 1x 8x     8x     8x     8x               8x     8x 1x               8x                 8x                   1x                 1x  
import winston from 'winston';
 
/**
 * Logger interface for the scraper toolkit
 */
export interface Logger {
  debug(message: string, meta?: unknown): void;
  info(message: string, meta?: unknown): void;
  warn(message: string, meta?: unknown): void;
  error(message: string, meta?: unknown): void;
}
 
/**
 * Logger configuration
 */
export interface LoggerConfig {
  level: 'debug' | 'info' | 'warn' | 'error';
  format: 'json' | 'text';
  filename?: string;
  console: boolean;
}
 
/**
 * Create a winston logger instance
 */
export function createLogger(config: LoggerConfig): Logger {
  const formats = [];
 
  // Add timestamp
  formats.push(winston.format.timestamp());
 
  // Add format based on config
  Iif (config.format === 'json') {
    formats.push(winston.format.json());
  } else {
    formats.push(
      winston.format.printf(({ timestamp, level, message, ...meta }) => {
        const metaStr = Object.keys(meta).length > 0 ? ` ${JSON.stringify(meta)}` : '';
        return `${timestamp} [${level.toUpperCase()}] ${message}${metaStr}`;
      })
    );
  }
 
  const transports: winston.transport[] = [];
 
  // Add console transport
  if (config.console) {
    transports.push(
      new winston.transports.Console({
        format: winston.format.combine(winston.format.colorize(), ...formats),
      })
    );
  }
 
  // Add file transport
  Iif (config.filename) {
    transports.push(
      new winston.transports.File({
        filename: config.filename,
        format: winston.format.combine(...formats),
      })
    );
  }
 
  return winston.createLogger({
    level: config.level,
    transports,
    exitOnError: false,
  });
}
 
/**
 * Default logger configuration
 */
export const defaultLoggerConfig: LoggerConfig = {
  level: (process.env.LOG_LEVEL ?? 'info') as LoggerConfig['level'],
  format: (process.env.LOG_FORMAT ?? 'text') as LoggerConfig['format'],
  console: true,
};
 
/**
 * Create default logger
 */
export const defaultLogger = createLogger(defaultLoggerConfig);