-
Notifications
You must be signed in to change notification settings - Fork 40
/
logger.ts
70 lines (54 loc) · 1.48 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
import {Options} from "./options"
export default interface Logger {
info(message: any): void
error(message: any, ...optionalParameters: any[]): void
debug(message: any): void
}
export class ConsoleLogger implements Logger {
options: Options
constructor(options: Options) {
this.options = options
if (this.options.debug) {
this.debug("DEBUG mode active")
}
}
info(message: any) {
if (!this.options.silent || this.options.debug) {
console.log(this.formatMessage(message, "INFO"))
}
}
debug(message: any) {
if (this.options.debug) {
console.debug(this.formatMessage(message, "DEBUG"))
}
}
error(message: any, ...optionalParameters: any[]) {
console.error(this.formatMessage(message, "ERROR"), ...optionalParameters)
}
formatMessage(message: any, level: string) {
const now = new Date()
const formattedNow = now.toISOString()
let messageString: string
if (typeof message == "object") {
messageString = JSON.stringify(message)
} else {
messageString = message
}
return `${formattedNow} [${this.options.name}] [${level}] ${messageString}`
}
}
export class NoopLogger implements Logger {
debug(message: any): void {
}
error(message: any, ...optionalParameters: any[]): void {
}
info(message: any): void {
}
}
const logger = {
log: new NoopLogger()
}
function initializeLogger(options: Options) {
logger.log = new ConsoleLogger(options)
}
export {logger, initializeLogger}