@bernierllc/logging
Version:
A comprehensive logging package with Winston integration for audit and system logging
68 lines (67 loc) • 3.09 kB
JavaScript
;
/*
Copyright (c) 2025 Bernier LLC
This file is licensed to the client under a limited-use license.
The client may use and modify this code *only within the scope of the project it was delivered for*.
Redistribution or use in other products or commercial offerings is not permitted without written consent from Bernier LLC.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.createBrowserLogger = createBrowserLogger;
const isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';
const LOG_LEVELS = ['error', 'warn', 'info', 'debug'];
let hasWarnedAboutLogLevel = false;
function getLogLevel(config) {
const envLevel = (typeof process !== 'undefined' && process.env && process.env.LOG_LEVEL) || (isBrowser && window?.LOG_LEVEL);
const configLevel = config?.level;
const level = (configLevel || envLevel || 'info').toLowerCase();
if (LOG_LEVELS.includes(level))
return level;
return 'info';
}
function shouldLog(entryLevel, currentLevel) {
return LOG_LEVELS.indexOf(entryLevel) <= LOG_LEVELS.indexOf(currentLevel);
}
function createBrowserLogger(config = {}) {
if (!isBrowser) {
throw new Error('[@bernierllc/logging] browserLogger can only be used in the browser. It must not be used in Node.js or server-side code.');
}
if (!window.LOG_LEVEL && !window.SUPPRESS_BROWSER_LOGGER_WARNING && !hasWarnedAboutLogLevel) {
// eslint-disable-next-line no-console
console.warn('[@bernierllc/logging] WARNING: window.LOG_LEVEL is not set. Browser logger will default to "info". Set window.LOG_LEVEL or window.SUPPRESS_BROWSER_LOGGER_WARNING = true to suppress this warning.');
hasWarnedAboutLogLevel = true;
}
const level = getLogLevel(config);
const defaultMeta = config.defaultMeta || {};
function log(entry) {
const entryLevel = (entry.level || 'info');
if (!shouldLog(entryLevel, level))
return;
const meta = { ...defaultMeta, ...entry.metadata };
const msg = `[${entryLevel.toUpperCase()}] ${entry.message}`;
const args = [msg, meta, entry.error, entry.context, entry.requestId, entry.userId].filter(Boolean);
switch (entryLevel) {
case 'error':
console.error(...args);
break;
case 'warn':
console.warn(...args);
break;
case 'info':
console.info(...args);
break;
case 'debug':
console.debug(...args);
break;
default:
console.log(...args);
}
}
return {
log,
error: (message, error, metadata) => log({ level: 'error', message, error, metadata }),
warn: (message, metadata) => log({ level: 'warn', message, metadata }),
info: (message, metadata) => log({ level: 'info', message, metadata }),
debug: (message, metadata) => log({ level: 'debug', message, metadata }),
};
}
//# sourceMappingURL=browserLogger.js.map