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