33 lines
1.8 KiB
JavaScript
33 lines
1.8 KiB
JavaScript
const PREFIX = "[RustPad]";
|
|
const LEVELS = Object.freeze({ off: 0, error: 1, warn: 2, info: 3, debug: 4 });
|
|
|
|
function configuredLevel() {
|
|
const configured = window.__RUSTPAD_CONFIG__?.frontendLogLevel;
|
|
return Object.prototype.hasOwnProperty.call(LEVELS, configured) ? configured : "warn";
|
|
}
|
|
|
|
function enabled(level) {
|
|
return LEVELS[configuredLevel()] >= LEVELS[level];
|
|
}
|
|
|
|
function safeDetails(details) {
|
|
if (!details || typeof details !== "object") return details;
|
|
const blocked = /password|token|secret|authorization|cookie|email|content/i;
|
|
return Object.fromEntries(Object.entries(details).map(([key, value]) => [key, blocked.test(key) ? "[redacted]" : value]));
|
|
}
|
|
|
|
export function logInfo(event, details = {}) { if (enabled("info")) console.info(PREFIX, event, safeDetails(details)); }
|
|
export function logWarn(event, details = {}) { if (enabled("warn")) console.warn(PREFIX, event, safeDetails(details)); }
|
|
export function logError(event, error, details = {}) {
|
|
if (enabled("error")) console.error(PREFIX, event, { ...safeDetails(details), error: error instanceof Error ? error.message : String(error) });
|
|
}
|
|
export function logDebug(event, details = {}) { if (enabled("debug")) console.debug(PREFIX, event, safeDetails(details)); }
|
|
|
|
export function installGlobalDiagnostics() {
|
|
logInfo("frontend.initialized", { path: location.pathname, assetVersion: document.body?.dataset.assetVersion || "unknown", logLevel: configuredLevel() });
|
|
window.addEventListener("error", (event) => logError("frontend.uncaught_error", event.error || event.message, { file: event.filename, line: event.lineno, column: event.colno }));
|
|
window.addEventListener("unhandledrejection", (event) => logError("frontend.unhandled_rejection", event.reason));
|
|
window.addEventListener("online", () => logInfo("network.online"));
|
|
window.addEventListener("offline", () => logWarn("network.offline"));
|
|
}
|