@fran-834/gs-microservice-core
Version:
Core package for Node.js microservices by Galduria Software. Includes security, logging, validation, and error handling middlewares.
52 lines (51 loc) • 1.89 kB
JavaScript
import * as winston from "winston";
import DailyRotateFile from "winston-daily-rotate-file";
import dotenvconf from "dotenv";
dotenvconf.config();
const { combine, timestamp, json } = winston.format;
/**
* Transport for rotating combined logs.
*/
const fileCombinedRotateTransport = new DailyRotateFile({
filename: "./logs/combined-%DATE%.log",
datePattern: "YYYY-MM-DD",
maxFiles: "14d",
level: "info",
});
/**
* Transport for rotating error logs.
*/
const fileErrorRotateTransport = new DailyRotateFile({
filename: "./logs/error-%DATE%.log",
datePattern: "YYYY-MM-DD",
level: "error",
maxFiles: "14d",
});
/**
* Winston logger instance with daily rotate file transports for combined and error logs.
* Handles exceptions and rejections as well.
* @type {import('winston').Logger}
*/
const logger = winston.loggers.add("appLogger", {
level: process.env.LOG_LEVEL ?? "info",
format: combine(timestamp(), json()),
defaultMeta: { service: process.env.SERVICE_NAME ?? "unknown-service" },
transports: [
new winston.transports.Console(), //{ format: winston.format.simple() }),
//
// - Write all logs with importance level of `error` or less to `error.log`
// - Write all logs with importance level of `info` or less to `combined.log`
//
fileErrorRotateTransport,
fileCombinedRotateTransport,
],
exceptionHandlers: [
new winston.transports.Console({ format: winston.format.combine() }),
new DailyRotateFile({ filename: "./logs/exceptions-%DATE%.log", datePattern: "YYYY-MM-DD", maxFiles: "14d" }),
],
rejectionHandlers: [
new winston.transports.Console({ format: winston.format.combine() }),
new DailyRotateFile({ filename: "./logs/rejections-%DATE%.log", datePattern: "YYYY-MM-DD", maxFiles: "14d" }),
],
});
export default logger;