@acadix/setup
Version:
Acadix Learning Management System backend application project setup
115 lines • 5.08 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.winston = exports.logger = void 0;
const winston_1 = __importStar(require("winston"));
exports.winston = winston_1.default;
const { combine, timestamp, label, printf, metadata, colorize } = winston_1.format;
const path_1 = __importDefault(require("path"));
const winston_slack_webhook_transport_1 = __importDefault(require("winston-slack-webhook-transport"));
// Logger output Format for file(error messages)
const logFormat = (serviceName) => printf((_a) => {
var { level, label, timestamp, message } = _a, meta = __rest(_a, ["level", "label", "timestamp", "message"]);
return `[${level}] ${timestamp} ${label} [${serviceName}]: ${message} ${Object.keys(meta).length ? JSON.stringify(meta) : ""}`;
});
const consoleFormat = (serviceName) => printf(({ level, label, timestamp, message }) => {
return `[${level}] ${timestamp} ${label} [${serviceName}]: ${message}`;
});
const logger = (env) => {
const logTransports = [];
const serviceName = env.SERVICE;
const consoleLog = new winston_1.transports.Console({
format: combine(colorize({ all: false, level: true }), consoleFormat(serviceName)),
});
const fileLog = new winston_1.transports.File({
level: "error",
filename: path_1.default.join(__dirname, `../logs/${serviceName}-logger.log`),
format: logFormat(serviceName),
});
const slackLog = new winston_slack_webhook_transport_1.default({
webhookUrl: env.SLACK_WEBHOOK,
channel: "server",
username: "AcadixError",
level: "error",
formatter: (info) => {
const attachments = [];
if (info.metadata.stack) {
const stackLines = info.metadata.stack.split("\n");
for (const line of stackLines) {
// Replace double backslashes with single backslashes
const formattedLine = line.replace(/\\\\/g, "\\");
attachments.push({
text: formattedLine,
});
}
}
return {
text: "No metadata to display",
attachments,
icon_emoji: ":cross_mark:",
blocks: [
{
type: "section",
text: {
type: "plain_text",
text: `${info.label} - ${serviceName.toUpperCase()}\n\n[${info.timestamp}]: ${info.message}`,
},
},
],
};
},
});
switch (env.APP_ENV) {
case "production":
logTransports.push(consoleLog, slackLog);
break;
case "test":
logTransports.push(consoleLog);
break;
default:
logTransports.push(fileLog, consoleLog);
break;
}
return (0, winston_1.createLogger)({
transports: logTransports,
format: combine(label({ label: "Acadix-Logger" }), timestamp({ format: "YY-MM-DD HH:mm:ss" }), metadata({ fillExcept: ["message", "level", "timestamp", "label"] }), logFormat(serviceName)),
});
};
exports.logger = logger;
//# sourceMappingURL=logger.js.map