51 lines
1.6 KiB
JavaScript
51 lines
1.6 KiB
JavaScript
/**
|
|
* @file rr-logger.js
|
|
* @description Centralized logger for Reynolds & Reynolds (RR) integrations.
|
|
* Emits logs to CloudWatch via logger util, and back to client sockets for live visibility.
|
|
*/
|
|
|
|
const logger = require("../utils/logger");
|
|
|
|
/**
|
|
* Create a structured RR log event.
|
|
*
|
|
* @param {object} socket - The socket or Express request (both supported).
|
|
* @param {"debug"|"info"|"warn"|"error"} level - Log level.
|
|
* @param {string} message - Human-readable log message.
|
|
* @param {object} [txnDetails] - Optional additional details (payloads, responses, etc.)
|
|
*/
|
|
const RRLogger = (socket, level = "info", message, txnDetails = {}) => {
|
|
try {
|
|
// Normalize level to uppercase for CloudWatch
|
|
const levelUpper = level.toUpperCase();
|
|
|
|
// Safe email and job correlation
|
|
const userEmail =
|
|
socket?.user?.email || socket?.request?.user?.email || socket?.handshake?.auth?.email || "unknown@user";
|
|
|
|
const jobid = socket?.JobData?.id || txnDetails?.jobid || null;
|
|
|
|
// Main logging entry (to CloudWatch / file)
|
|
logger.log("rr-log-event", levelUpper, userEmail, jobid, {
|
|
wsmessage: message,
|
|
txnDetails
|
|
});
|
|
|
|
// Emit to live Socket.IO client if available
|
|
if (typeof socket.emit === "function") {
|
|
socket.emit("rr-log-event", {
|
|
level: levelUpper,
|
|
message,
|
|
txnDetails,
|
|
timestamp: new Date().toISOString()
|
|
});
|
|
}
|
|
} catch (err) {
|
|
// As a fallback, log directly to console
|
|
console.error("RRLogger internal error:", err);
|
|
console.error("Original message:", message, txnDetails);
|
|
}
|
|
};
|
|
|
|
module.exports = RRLogger;
|