@receeco/pos-agent
Version:
Receeco POS Integration Middleware Agent
93 lines • 4.37 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createLogger = void 0;
const winston_1 = __importDefault(require("winston"));
const path_1 = __importDefault(require("path"));
const fs_1 = __importDefault(require("fs"));
const logsDir = path_1.default.join(process.cwd(), "logs");
if (!fs_1.default.existsSync(logsDir)) {
fs_1.default.mkdirSync(logsDir, { recursive: true });
}
const createLogger = () => {
const isProduction = process.env.NODE_ENV === 'production';
const isRender = process.env.RENDER === 'true';
const transports = [];
if (isRender) {
transports.push(new winston_1.default.transports.Console({
level: "warn",
format: winston_1.default.format.combine(winston_1.default.format.timestamp({ format: 'HH:mm:ss' }), winston_1.default.format.errors({ stack: true }), winston_1.default.format.printf(({ timestamp, level, message, service, stack, ...meta }) => {
const safeStringify = (obj) => {
try {
return JSON.stringify(obj, (key, value) => {
if (key === 'req' || key === 'res' || key === 'request' || key === 'response') {
return '[Circular]';
}
if (typeof value === 'object' && value !== null) {
if (value.constructor && value.constructor.name === 'ClientRequest') {
return '[ClientRequest]';
}
if (value.constructor && value.constructor.name === 'IncomingMessage') {
return '[IncomingMessage]';
}
}
return value;
});
}
catch (error) {
return '[Unserializable Object]';
}
};
const metaStr = Object.keys(meta).length ? ` ${safeStringify(meta)}` : '';
const stackStr = stack ? `\n${stack}` : '';
return `[${timestamp}] ${level.toUpperCase()}: ${message}${metaStr}${stackStr}`;
})),
}));
}
else {
transports.push(new winston_1.default.transports.Console({
format: winston_1.default.format.combine(winston_1.default.format.colorize(), winston_1.default.format.simple()),
}));
}
if (!isProduction || !isRender) {
try {
const DailyRotateFile = require("winston-daily-rotate-file");
transports.push(new DailyRotateFile({
filename: path_1.default.join(logsDir, "error-%DATE%.log"),
datePattern: "YYYY-MM-DD",
level: "error",
maxSize: "5m",
maxFiles: "3d",
zippedArchive: true,
}), new DailyRotateFile({
filename: path_1.default.join(logsDir, "combined-%DATE%.log"),
datePattern: "YYYY-MM-DD",
maxSize: "10m",
maxFiles: "3d",
zippedArchive: true,
}));
}
catch (error) {
transports.push(new winston_1.default.transports.File({
filename: path_1.default.join(logsDir, "error.log"),
level: "error",
maxsize: 5242880,
maxFiles: 2,
}), new winston_1.default.transports.File({
filename: path_1.default.join(logsDir, "combined.log"),
maxsize: 10485760,
maxFiles: 2,
}));
}
}
return winston_1.default.createLogger({
level: isRender ? "warn" : (process.env.LOG_LEVEL || "info"),
format: winston_1.default.format.combine(winston_1.default.format.timestamp(), winston_1.default.format.errors({ stack: true }), isRender ? winston_1.default.format.simple() : winston_1.default.format.json()),
defaultMeta: { service: "receeco-pos-agent" },
transports,
});
};
exports.createLogger = createLogger;
//# sourceMappingURL=logger.js.map