feat(core-shared): add ILogger interface + NoopLogger
This commit is contained in:
23
packages/core-shared/src/instrumentation/logger.interface.ts
Normal file
23
packages/core-shared/src/instrumentation/logger.interface.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
export type Breadcrumb = {
|
||||
category: string;
|
||||
message: string;
|
||||
level?: "info" | "warning" | "error";
|
||||
data?: Record<string, unknown>;
|
||||
};
|
||||
|
||||
export type CaptureContext = {
|
||||
tags?: Record<string, string>;
|
||||
extras?: Record<string, unknown>;
|
||||
fingerprint?: string[];
|
||||
};
|
||||
|
||||
export interface ILogger {
|
||||
captureException(err: unknown, ctx?: CaptureContext): void;
|
||||
captureMessage(
|
||||
msg: string,
|
||||
level?: "info" | "warning" | "error",
|
||||
ctx?: CaptureContext,
|
||||
): void;
|
||||
addBreadcrumb(b: Breadcrumb): void;
|
||||
setUser(user: { id: string } | null): void;
|
||||
}
|
||||
34
packages/core-shared/src/instrumentation/noop-logger.test.ts
Normal file
34
packages/core-shared/src/instrumentation/noop-logger.test.ts
Normal file
@@ -0,0 +1,34 @@
|
||||
import { describe, it, expect } from "vitest";
|
||||
import { NoopLogger } from "@/instrumentation/noop-logger";
|
||||
|
||||
describe("NoopLogger", () => {
|
||||
it("captureException is callable with err and ctx", () => {
|
||||
const logger = new NoopLogger();
|
||||
expect(() => logger.captureException(new Error("x"))).not.toThrow();
|
||||
expect(() =>
|
||||
logger.captureException(new Error("x"), { tags: { feature: "blog" } }),
|
||||
).not.toThrow();
|
||||
});
|
||||
|
||||
it("captureMessage is callable", () => {
|
||||
const logger = new NoopLogger();
|
||||
expect(() => logger.captureMessage("hello")).not.toThrow();
|
||||
expect(() => logger.captureMessage("hello", "warning")).not.toThrow();
|
||||
expect(() =>
|
||||
logger.captureMessage("hello", "error", { extras: { foo: 1 } }),
|
||||
).not.toThrow();
|
||||
});
|
||||
|
||||
it("addBreadcrumb is callable", () => {
|
||||
const logger = new NoopLogger();
|
||||
expect(() =>
|
||||
logger.addBreadcrumb({ category: "test", message: "x" }),
|
||||
).not.toThrow();
|
||||
});
|
||||
|
||||
it("setUser accepts opaque id and null", () => {
|
||||
const logger = new NoopLogger();
|
||||
expect(() => logger.setUser({ id: "u1" })).not.toThrow();
|
||||
expect(() => logger.setUser(null)).not.toThrow();
|
||||
});
|
||||
});
|
||||
12
packages/core-shared/src/instrumentation/noop-logger.ts
Normal file
12
packages/core-shared/src/instrumentation/noop-logger.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
import type { ILogger, Breadcrumb, CaptureContext } from "./logger.interface";
|
||||
|
||||
export class NoopLogger implements ILogger {
|
||||
captureException(_err: unknown, _ctx?: CaptureContext): void {}
|
||||
captureMessage(
|
||||
_msg: string,
|
||||
_level?: "info" | "warning" | "error",
|
||||
_ctx?: CaptureContext,
|
||||
): void {}
|
||||
addBreadcrumb(_b: Breadcrumb): void {}
|
||||
setUser(_user: { id: string } | null): void {}
|
||||
}
|
||||
Reference in New Issue
Block a user