UNPKG

@bernierllc/logging

Version:

A comprehensive logging package with Winston integration for audit and system logging

68 lines (67 loc) 3.09 kB
"use strict"; /* 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