import { setLogLevel as setClientSdkLogLevel, setLogExtension as setClientSdkLogExtension, LogLevel as LogLevelEnum, } from 'livekit-client'; import loglevel from 'loglevel' export const log = loglevel.getLogger('lk-components-js'); log.setDefaultLevel('WARN'); type LogLevel = Parameters[0]; type SetLogLevelOptions = { liveKitClientLogLevel?: LogLevel; }; /** * Set the log level for both the `@livekit/components-react` package and the `@livekit-client` package. * To set the `@livekit-client` log independently, use the `liveKitClientLogLevel` prop on the `options` object. * @public */ export function setLogLevel(level: LogLevel, options: SetLogLevelOptions = {}): void { log.setLevel(level); setClientSdkLogLevel(options.liveKitClientLogLevel ?? level); } type LogExtension = (level: LogLevel, msg: string, context?: object) => void; type SetLogExtensionOptions = { liveKitClientLogExtension?: LogExtension; }; /** * Set the log extension for both the `@livekit/components-react` package and the `@livekit-client` package. * To set the `@livekit-client` log extension, use the `liveKitClientLogExtension` prop on the `options` object. * @public */ export function setLogExtension(extension: LogExtension, options: SetLogExtensionOptions = {}) { const originalFactory = log.methodFactory; log.methodFactory = (methodName, configLevel, loggerName) => { const rawMethod = originalFactory(methodName, configLevel, loggerName); const logLevel = LogLevelEnum[methodName]; const needLog = logLevel >= configLevel && logLevel < LogLevelEnum.silent; return (msg, context?: [msg: string, context: object]) => { if (context) rawMethod(msg, context); else rawMethod(msg); if (needLog) { extension(logLevel, msg, context); } }; }; log.setLevel(log.getLevel()); // Be sure to call setLevel method in order to apply plugin setClientSdkLogExtension(options.liveKitClientLogExtension ?? extension); }