27 lines
879 B
TypeScript
27 lines
879 B
TypeScript
import pino, { type Logger } from "pino";
|
|
import { z } from "zod";
|
|
|
|
/** Supported structured log levels at the process boundary. */
|
|
export type LogLevel = z.infer<typeof logLevelSchema>;
|
|
|
|
const logLevelSchema = z
|
|
.enum(["trace", "debug", "info", "warn", "error", "fatal", "silent"])
|
|
.default("info");
|
|
|
|
/** Parse the optional REA_LOG_LEVEL environment variable. */
|
|
export const parseLogLevel = (value: unknown): LogLevel =>
|
|
logLevelSchema.parse(value);
|
|
|
|
/** Create a JSON logger on stderr so protocol and CLI result stdout stay valid. */
|
|
export const createLogger = (mode: "mcp" | "cli", level: LogLevel): Logger =>
|
|
pino(
|
|
{
|
|
level,
|
|
base: { application: "rea", mode },
|
|
},
|
|
pino.destination({ dest: 2, sync: false }),
|
|
);
|
|
|
|
/** Logger used by embedders that have not opted into process output. */
|
|
export const silentLogger = pino({ level: "silent" });
|