/**
* Logger module for the GitHubServer API
* @file logger.js
* @version 3.0.0
* @author Michael Hay <michael.hay@mediumroast.io>
* @copyright 2025 Mediumroast, Inc. All rights reserved.
*/
/* eslint-disable no-console */
// Create a logger with sensible defaults
export const logger = {
debug: (...args) => console.debug(`[${new Date().toISOString()}] [DEBUG]`, ...args),
info: (...args) => console.info(`[${new Date().toISOString()}] [INFO]`, ...args),
warn: (...args) => console.warn(`[${new Date().toISOString()}] [WARN]`, ...args),
error: (...args) => console.error(`[${new Date().toISOString()}] [ERROR]`, ...args),
// Always return a tracker object with an end method
trackOperation: (objType, operation) => {
const startTime = Date.now();
// Only log in debug mode to avoid cluttering the console
if (process.env.DEBUG) {
console.debug(`[${new Date().toISOString()}] Starting operation: ${objType}.${operation}`);
}
return {
end: () => {
if (process.env.DEBUG) {
const duration = Date.now() - startTime;
console.debug(`[${new Date().toISOString()}] Completed operation: ${objType}.${operation} (${duration}ms)`);
}
}
};
},
// Similar for transaction tracking
trackTransaction: (transactionName) => {
const startTime = Date.now();
if (process.env.DEBUG) {
console.debug(`[${new Date().toISOString()}] Starting transaction: ${transactionName}`);
}
return {
end: () => {
if (process.env.DEBUG) {
const duration = Date.now() - startTime;
console.debug(`[${new Date().toISOString()}] Completed transaction: ${transactionName} (${duration}ms)`);
}
}
};
}
};