bunker-admin 39d74e7b85 Add guided tour, media enhancements, error handling, and DevOps improvements
Major additions: onboarding tour system, correlation-id middleware, media
error handler, restore script, env validation script, Dockerignore files.
Updates across 70+ admin components for improved UX and error handling.

Bunker Admin
2026-03-26 10:31:51 -06:00

49 lines
1.5 KiB
TypeScript

import winston from 'winston';
import { env } from '../config/env';
const consoleFormat = winston.format.combine(
winston.format.colorize(),
winston.format.printf(({ timestamp, level, message, ...meta }) => {
const metaStr = Object.keys(meta).length ? ` ${JSON.stringify(meta)}` : '';
return `${timestamp} [${level}]: ${message}${metaStr}`;
})
);
const transports: winston.transport[] = [new winston.transports.Console()];
export const logger = winston.createLogger({
level: env.NODE_ENV === 'production' ? 'info' : 'debug',
format: winston.format.combine(
winston.format.timestamp(),
winston.format.errors({ stack: true }),
env.NODE_ENV === 'production'
? winston.format.json()
: consoleFormat
),
transports,
});
// Add file transport in production (dynamic import to avoid breaking dev when not installed)
if (env.NODE_ENV === 'production') {
import('winston-daily-rotate-file').then((mod) => {
const DailyRotateFile = mod.default;
logger.add(
new DailyRotateFile({
dirname: env.LOG_DIR,
filename: 'api-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxSize: '20m',
maxFiles: '14d',
zippedArchive: true,
format: winston.format.combine(
winston.format.timestamp(),
winston.format.errors({ stack: true }),
winston.format.json(),
),
})
);
}).catch(() => {
logger.warn('winston-daily-rotate-file not installed, file logging disabled');
});
}