@zencemarketing/web-sdk
Version:
ZenceMarketing Web SDK for push notifications, popups, and custom event tracking.
90 lines (77 loc) • 2.16 kB
text/typescript
type LogLevel = "none" | "error" | "warn" | "info" | "debug";
interface LoggerConfig {
level: LogLevel;
remoteLogging?: boolean;
remoteUrl?: string;
sdkVersion?: string;
}
export class SDKLogger {
private level: LogLevel;
private remoteLogging: boolean;
private remoteUrl?: string;
private sdkVersion?: string;
constructor(config: LoggerConfig) {
this.level = config.level;
this.remoteLogging = config.remoteLogging || false;
this.remoteUrl = config.remoteUrl;
this.sdkVersion = config.sdkVersion;
}
setLevel(level: LogLevel) {
this.level = level;
}
setEnabled(enabled: boolean) {
this.level = enabled ? this.level : "none";
}
setRemoteLogging(enabled: boolean) {
this.remoteLogging = enabled;
}
private shouldLog(level: LogLevel): boolean {
if (this.level === "none") return false;
const order: LogLevel[] = ["error", "warn", "info", "debug"];
return order.indexOf(level) <= order.indexOf(this.level);
}
private sendRemoteLog(level: string, ...args: any[]) {
if (this.remoteLogging && this.remoteUrl) {
try {
fetch(this.remoteUrl, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
level,
message: args,
sdkVersion: this.sdkVersion,
timestamp: new Date().toISOString(),
}),
});
} catch (e) {
console.warn("Remote log failed:", e);
}
}
}
error(...args: any[]) {
if (this.shouldLog("error")) {
console.error("[SDK ERROR]", ...args);
this.sendRemoteLog("error", ...args);
}
}
warn(...args: any[]) {
if (this.shouldLog("warn")) {
console.warn("[SDK WARN]", ...args);
this.sendRemoteLog("warn", ...args);
}
}
info(...args: any[]) {
if (this.shouldLog("info")) {
console.info("[SDK INFO]", ...args);
this.sendRemoteLog("info", ...args);
}
}
debug(...args: any[]) {
if (this.shouldLog("debug")) {
console.debug("[SDK DEBUG]", ...args);
this.sendRemoteLog("debug", ...args);
}
}
}