forked from turt2live/matrix-bot-sdk
-
Notifications
You must be signed in to change notification settings - Fork 1
/
LogService.ts
167 lines (146 loc) · 4.98 KB
/
LogService.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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
import { MatrixError } from "../models/MatrixError";
import { ConsoleLogger } from "./ConsoleLogger";
import { ILogger } from "./ILogger";
/**
* The log levels to log at.
* @category Logging
*/
export class LogLevel {
/**
* The TRACE channel
*/
public static readonly TRACE = new LogLevel("TRACE", -1);
/**
* The DEBUG channel
*/
public static readonly DEBUG = new LogLevel("DEBUG", 0);
/**
* The INFO channel
*/
public static readonly INFO = new LogLevel("INFO", 1);
/**
* The WARN channel
*/
public static readonly WARN = new LogLevel("WARN", 2);
/**
* The ERROR channel
*/
public static readonly ERROR = new LogLevel("ERROR", 3);
private constructor(private level: string, private sequence: number) {
}
public includes(level: LogLevel): boolean {
return level.sequence >= this.sequence;
}
public toString(): string {
return this.level;
}
public static fromString(level: string, defaultLevel = LogLevel.DEBUG): LogLevel {
if (!level) return defaultLevel;
if (level.toUpperCase() === LogLevel.TRACE.level) return LogLevel.TRACE;
if (level.toUpperCase() === LogLevel.DEBUG.level) return LogLevel.DEBUG;
if (level.toUpperCase() === LogLevel.INFO.level) return LogLevel.INFO;
if (level.toUpperCase() === LogLevel.WARN.level) return LogLevel.WARN;
if (level.toUpperCase() === LogLevel.ERROR.level) return LogLevel.ERROR;
return defaultLevel;
}
}
/**
* Service class for logging in the bot-sdk
* @category Logging
*/
export class LogService {
private static logger: ILogger = new ConsoleLogger();
private static logLevel: LogLevel = LogLevel.INFO;
private static mutedModules: string[] = [];
private constructor() {
}
/**
* The level at which the LogService is running.
*/
public static get level(): LogLevel {
return this.logLevel;
}
/**
* Sets the log level for this logger. Defaults to DEBUG.
* @param {LogLevel} level the new log level
*/
public static setLevel(level: LogLevel) {
LogService.logLevel = level || LogLevel.DEBUG;
}
/**
* Sets a new logger for the Log Service
* @param {ILogger} logger the new logger
*/
public static setLogger(logger: ILogger) {
LogService.logger = logger;
}
/**
* Mutes a module from the logger.
* @param {string} name The module name to mute.
*/
public static muteModule(name: string) {
LogService.mutedModules.push(name);
}
/**
* Logs to the TRACE channel
* @param {string} module The module being logged
* @param {any[]} messageOrObject The data to log
*/
public static trace(module: string, ...messageOrObject: any[]) {
if (!LogService.logLevel.includes(LogLevel.TRACE)) return;
if (LogService.mutedModules.includes(module)) return;
LogService.logger.trace(module, ...messageOrObject);
}
/**
* Logs to the DEBUG channel
* @param {string} module The module being logged
* @param {any[]} messageOrObject The data to log
*/
public static debug(module: string, ...messageOrObject: any[]) {
if (!LogService.logLevel.includes(LogLevel.DEBUG)) return;
if (LogService.mutedModules.includes(module)) return;
LogService.logger.debug(module, ...messageOrObject);
}
/**
* Logs to the ERROR channel
* @param {string} module The module being logged
* @param {any[]} messageOrObject The data to log
*/
public static error(module: string, ...messageOrObject: any[]) {
if (!LogService.logLevel.includes(LogLevel.ERROR)) return;
if (LogService.mutedModules.includes(module)) return;
LogService.logger.error(module, ...messageOrObject);
}
/**
* Logs to the INFO channel
* @param {string} module The module being logged
* @param {any[]} messageOrObject The data to log
*/
public static info(module: string, ...messageOrObject: any[]) {
if (!LogService.logLevel.includes(LogLevel.INFO)) return;
if (LogService.mutedModules.includes(module)) return;
LogService.logger.info(module, ...messageOrObject);
}
/**
* Logs to the WARN channel
* @param {string} module The module being logged
* @param {any[]} messageOrObject The data to log
*/
public static warn(module: string, ...messageOrObject: any[]) {
if (!LogService.logLevel.includes(LogLevel.WARN)) return;
if (LogService.mutedModules.includes(module)) return;
LogService.logger.warn(module, ...messageOrObject);
}
}
/**
* Extracts the useful part of a request's error into something loggable.
* @param {Error} err The error to parse.
* @returns {*} The extracted error, or the given error if unaltered.
* @category Logging
*/
export function extractRequestError(err: Error | MatrixError): any {
if (err && 'body' in err) {
return err.body;
}
return err;
}