winston-asynchandler
Version:
Production-grade async error handler for Express with Winston logger and standard API responses.
39 lines (33 loc) • 972 B
JavaScript
import { createLogger, format, transports } from "winston";
import fs from "fs";
import path from "path";
const { combine, timestamp, printf, colorize } = format;
const logDir = path.resolve("logs");
if (!fs.existsSync(logDir)) {
fs.mkdirSync(logDir);
}
const logFormat = printf(({ level, message, timestamp }) => {
return `[${timestamp}] ${level}: ${message}`;
});
export const logger = createLogger({
level: "info",
format: combine(timestamp({ format: "YYYY-MM-DD HH:mm:ss" }), logFormat),
transports: [
new transports.File({
filename: path.join(logDir, "error.log"),
level: "error",
}),
new transports.File({ filename: path.join(logDir, "combined.log") }),
],
});
if (process.env.NODE_ENV !== "production") {
logger.add(
new transports.Console({
format: combine(
colorize(),
timestamp({ format: "YYYY-MM-DD HH:mm:ss" }),
logFormat
),
})
);
}