livekit-client
Version:
JavaScript/TypeScript client SDK for LiveKit
97 lines (80 loc) • 2.9 kB
text/typescript
import * as log from 'loglevel';
export enum LogLevel {
trace = 0,
debug = 1,
info = 2,
warn = 3,
error = 4,
silent = 5,
}
export enum LoggerNames {
Default = 'livekit',
Room = 'livekit-room',
TokenSource = 'livekit-token-source',
Participant = 'livekit-participant',
Track = 'livekit-track',
Publication = 'livekit-track-publication',
Engine = 'livekit-engine',
Signal = 'livekit-signal',
PCManager = 'livekit-pc-manager',
PCTransport = 'livekit-pc-transport',
E2EE = 'lk-e2ee',
DataTracks = 'livekit-data-tracks',
}
type LogLevelString = keyof typeof LogLevel;
export type StructuredLogger = log.Logger & {
trace: (msg: string, context?: object) => void;
debug: (msg: string, context?: object) => void;
info: (msg: string, context?: object) => void;
warn: (msg: string, context?: object) => void;
error: (msg: string, context?: object) => void;
setDefaultLevel: (level: log.LogLevelDesc) => void;
setLevel: (level: log.LogLevelDesc) => void;
getLevel: () => number;
};
let livekitLogger = log.getLogger('livekit');
const livekitLoggers = Object.values(LoggerNames).map((name) => log.getLogger(name));
livekitLogger.setDefaultLevel(LogLevel.info);
export default livekitLogger as StructuredLogger;
/**
* @internal
*/
export function getLogger(name: string) {
const logger = log.getLogger(name);
logger.setDefaultLevel(livekitLogger.getLevel());
return logger as StructuredLogger;
}
export function setLogLevel(level: LogLevel | LogLevelString, loggerName?: LoggerNames) {
if (loggerName) {
log.getLogger(loggerName).setLevel(level);
} else {
for (const logger of livekitLoggers) {
logger.setLevel(level);
}
}
}
export type LogExtension = (level: LogLevel, msg: string, context?: object) => void;
/**
* use this to hook into the logging function to allow sending internal livekit logs to third party services
* if set, the browser logs will lose their stacktrace information (see https://github.com/pimterry/loglevel#writing-plugins)
*/
export function setLogExtension(extension: LogExtension, logger?: StructuredLogger) {
const loggers = logger ? [logger] : livekitLoggers;
loggers.forEach((logR) => {
const originalFactory = logR.methodFactory;
logR.methodFactory = (methodName, configLevel, loggerName) => {
const rawMethod = originalFactory(methodName, configLevel, loggerName);
const logLevel = LogLevel[methodName as LogLevelString];
const needLog = logLevel >= configLevel && logLevel < LogLevel.silent;
return (msg, context?: [msg: string, context: object]) => {
if (context) rawMethod(msg, context);
else rawMethod(msg);
if (needLog) {
extension(logLevel, msg, context);
}
};
};
logR.setLevel(logR.getLevel());
});
}
export const workerLogger = log.getLogger('lk-e2ee') as StructuredLogger;