summaryrefslogtreecommitdiff
path: root/client-web/source/logger.ts
diff options
context:
space:
mode:
Diffstat (limited to 'client-web/source/logger.ts')
-rw-r--r--client-web/source/logger.ts50
1 files changed, 50 insertions, 0 deletions
diff --git a/client-web/source/logger.ts b/client-web/source/logger.ts
new file mode 100644
index 0000000..e00b1d0
--- /dev/null
+++ b/client-web/source/logger.ts
@@ -0,0 +1,50 @@
+/// <reference lib="dom" />
+
+const log_tag_color = {
+ "*": "#FF4444",
+ webrtc: "#FF44FF",
+ media: "#FFFF44",
+ ws: "#44FFFF",
+ rnnoise: "#2222FF",
+ usermodel: "#44FF44",
+ error: "#FF0000",
+}
+export type LogTag = keyof typeof log_tag_color
+
+let logger_container: HTMLDivElement
+
+// TODO maybe log time aswell
+// deno-lint-ignore no-explicit-any
+export function log(tag: LogTag, message: string, ...data: any[]) {
+ for (let i = 0; i < data.length; i++) {
+ const e = data[i];
+ if (e instanceof MediaStreamTrack) data[i] = `(${e.kind}) ${e.id}`
+ }
+ console.log(`%c[${tag}] ${message}`, "color:" + log_tag_color[tag], ...data);
+
+ if (logger_container) {
+ const e = document.createElement("p")
+ e.classList.add("logger-line")
+ e.textContent = `[${tag}] ${message}`
+ e.style.color = log_tag_color[tag]
+ logger_container.append(e)
+ setTimeout(() => {
+ e.remove()
+ }, tag == "error" ? 60000 : 6000)
+ }
+}
+
+globalThis.addEventListener("load", () => {
+ const d = document.createElement("div")
+ d.classList.add("logger-container")
+ document.body.append(d)
+ logger_container = d
+
+ // clear the console every hour so logs dont accumulate
+ setInterval(() => console.clear(), 1000 * 60 * 60)
+})
+
+globalThis.onerror = (_ev, source, line, col, err) => {
+ log("error", `${err?.name} ${err?.message}`, err)
+ log("error", `on ${source}:${line}:${col}`, err)
+} \ No newline at end of file