powr-sdk-api
Version:
Shared API core library for PowrStack projects
57 lines (50 loc) • 1.71 kB
JavaScript
;
/**
* 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;