51 lines
1.1 KiB
TypeScript
51 lines
1.1 KiB
TypeScript
export class Logger {
|
|
constructor(
|
|
private readonly endpoint: string,
|
|
private readonly token: string,
|
|
private readonly path: string,
|
|
) {}
|
|
|
|
send(
|
|
level: "log" | "error" | "warn" | "info",
|
|
message: string,
|
|
...metadata: unknown[]
|
|
) {
|
|
const data = {
|
|
level,
|
|
message: `${this.path}: ${message}`,
|
|
metadata,
|
|
};
|
|
|
|
fetch(`${this.endpoint}`, {
|
|
method: "POST",
|
|
body: JSON.stringify(data),
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
"x-api-key": this.token,
|
|
},
|
|
}).catch((error) => {
|
|
console.error("Failed to send log to logger:", error);
|
|
});
|
|
}
|
|
|
|
log(message: string, ...metadata: unknown[]) {
|
|
this.send("log", message, ...metadata);
|
|
}
|
|
|
|
error(message: string, ...metadata: unknown[]) {
|
|
this.send("error", message, ...metadata);
|
|
}
|
|
|
|
warn(message: string, ...metadata: unknown[]) {
|
|
this.send("warn", message, ...metadata);
|
|
}
|
|
|
|
info(message: string, ...metadata: unknown[]) {
|
|
this.send("info", message, ...metadata);
|
|
}
|
|
|
|
child(path: string): Logger {
|
|
return new Logger(this.endpoint, this.token, `${this.path}.${path}`);
|
|
}
|
|
}
|