UNPKG

powr-sdk-api

Version:

Shared API core library for PowrStack projects

57 lines (50 loc) 1.71 kB
"use strict"; /** * Logger utility for Express applications */ const winston = require('winston'); const S3Transport = require('./s3-transport'); /** * Creates a Winston logger instance with configured transports * @param {Object} options - Logger configuration options * @param {string} options.service - Service name for logging * @param {string} options.level - Log level (default: 'info') * @param {Object} options.s3 - S3 transport configuration * @param {string} options.s3.bucket - S3 bucket name * @param {string} options.s3.prefix - S3 key prefix * @param {number} options.s3.bufferSize - Buffer size for S3 uploads * @param {number} options.s3.flushInterval - Flush interval in milliseconds * @returns {winston.Logger} Configured Winston logger instance */ const createLogger = (options = {}) => { const { service = 'api', level = process.env.LOG_LEVEL || 'info', s3 = null } = options; // Custom format for logs const logFormat = winston.format.combine(winston.format.timestamp(), winston.format.errors({ stack: true }), winston.format.json()); // Create base transports array with console transport const transports = [new winston.transports.Console()]; // Add S3 transport if configured if (s3 && process.env.NODE_ENV === 'production') { transports.push(new S3Transport({ bucket: s3.bucket, prefix: s3.prefix || 'logs', bufferSize: s3.bufferSize || 100, flushInterval: s3.flushInterval || 5000 })); } // Create and return the logger return winston.createLogger({ level, format: logFormat, defaultMeta: { service }, transports }); }; module.exports = createLogger;