/
logger.ts
93 lines (77 loc) · 2.74 KB
/
logger.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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',
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',
}
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);
}
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;