You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.4 KiB
39 lines
1.4 KiB
/**
|
|
* Ephemeral, in-memory debug-logging contract — shared across server and
|
|
* browser code, and by any package/project that wants to emit developer-
|
|
* facing debug output (see docs/LOGGING.md). Deliberately unrelated to
|
|
* `$lib/server/core/analytics.ts`: that module is a permanent record of
|
|
* business data (sessions/messages/tool-calls/events); this is a disposable
|
|
* debugging aid, never persisted to disk.
|
|
*
|
|
* `category` is an intentionally open string, not a closed union — packages
|
|
* like `humanoid` (and its `eye` sub-package) own their own namespace (e.g.
|
|
* `"humanoid.eye"`) without core needing to know about them ahead of time,
|
|
* the same "no registration step" rule as the package system itself (see
|
|
* docs/ARCHITECTURE.md's "Optional packages" section).
|
|
*/
|
|
|
|
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
|
|
export interface LogEntry {
|
|
level: LogLevel;
|
|
category: string;
|
|
message: string;
|
|
data?: unknown;
|
|
timestamp: number; // epoch ms
|
|
}
|
|
|
|
export interface Logger {
|
|
debug(category: string, message: string, data?: unknown): void;
|
|
info(category: string, message: string, data?: unknown): void;
|
|
warn(category: string, message: string, data?: unknown): void;
|
|
error(category: string, message: string, data?: unknown): void;
|
|
}
|
|
|
|
/** Discards every call. Useful as a default so callers never need to null-check a `Logger`. */
|
|
export const NOOP_LOGGER: Logger = {
|
|
debug() {},
|
|
info() {},
|
|
warn() {},
|
|
error() {}
|
|
};
|
|
|