From dfa9e0283da26b369e1bd953a6e5f0a9f3562791 Mon Sep 17 00:00:00 2001 From: gnezim Date: Tue, 14 Apr 2026 23:57:56 +0300 Subject: [PATCH] Add LoggerProvider React context with useLogger hook --- src/observability/logger/provider.tsx | 41 +++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/observability/logger/provider.tsx diff --git a/src/observability/logger/provider.tsx b/src/observability/logger/provider.tsx new file mode 100644 index 00000000..0ee784be --- /dev/null +++ b/src/observability/logger/provider.tsx @@ -0,0 +1,41 @@ +import { createContext, useContext } from "react"; +import type { ReactNode } from "react"; +import type { Logger } from "./types.js"; + +const LoggerContext = createContext(null); + +export interface LoggerProviderProps { + logger: Logger; + children: ReactNode; +} + +/** + * Provides the Logger instance to the React tree. On the server, + * use a request-scoped child logger (with traceId, locale). On the + * client, use the shared root logger from createRootLogger(). + */ +export function LoggerProvider({ + logger, + children, +}: LoggerProviderProps): JSX.Element { + return ( + + {children} + + ); +} + +/** + * Returns the Logger from context. Throws if used outside + * . + */ +export function useLogger(): Logger { + const logger = useContext(LoggerContext); + if (!logger) { + throw new Error( + "useLogger() must be used within a . " + + "Ensure the root layout wraps the tree with .", + ); + } + return logger; +}