Overview
Production-grade structured logging. Essential for debugging and observability.
Features
- Multiple log levels
- JSON formatting
- File and console transports
- Custom metadata
Installation
npx hanma add winston-logger
Dependencies
winston
Code
import winston from "winston";
import morgan from "morgan";
const levels = {
error: 0,
warn: 1,
info: 2,
http: 3,
debug: 4,
};
const level = () => {
const env = process.env.NODE_ENV || "development";
const isDevelopment = env === "development";
return isDevelopment ? "debug" : "warn";
};
const colors = {
error: "red",
warn: "yellow",
info: "green",
http: "magenta",
debug: "white",
};
winston.addColors(colors);
const format = winston.format.combine(
winston.format.timestamp({ format: "YYYY-MM-DD HH:mm:ss:ms" }),
winston.format.colorize({ all: true }),
winston.format.printf(
(info) => `${info.timestamp} ${info.level}: ${info.message}`
)
);
const transports = [
new winston.transports.Console(),
// Add File transport if needed for production
// new winston.transports.File({
// filename: 'logs/error.log',
// level: 'error',
// }),
// new winston.transports.File({ filename: 'logs/all.log' }),
];
export const logger = winston.createLogger({
level: level(),
levels,
format,
transports,
});
export const apiLogger = morgan(
":method :url :status :res[content-length] - :response-time ms",
{
stream: {
write: (message) => logger.http(message.trim()),
},
}
);
Usage
import { logger } from './middleware/loggers/winston-logger';
logger.info('User logged in', { userId: 123 });
Dependencies
winston
Frequently Asked Questions
How do I install Winston Logger?
Run the following command:
npx hanma add winston-loggerWhat dependencies are required?
This snippet requires: winston. Make sure to install them before using the snippet.
How do I use this snippet?
Copy the code and paste it into your project. The snippet will be saved to
middleware/loggers/winston-logger.ts.Can I customize this snippet?
Yes! All snippets are copy-paste code that you own. Feel free to modify them to fit your needs.
Does this work with other frameworks?
This snippet is designed for the specific framework. Check the other framework pages for equivalent implementations.