-
-
Notifications
You must be signed in to change notification settings - Fork 43
/
Copy pathlogger.ts
157 lines (142 loc) · 3.9 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
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
/** Log levels. */
export enum LogLevel {
DEBUG = 'debug',
LOG = 'log',
INFO = 'info',
WARN = 'warn',
ERROR = 'error',
OFF = 'off',
}
/** Interface definition for the logger. */
export type ILogger = Pick<
typeof console,
'debug' | 'log' | 'info' | 'warn' | 'error'
>;
/** The logger class. */
export class Logger implements ILogger {
/**
* Constructs a new logger.
*
* @param logger The wrapped logger that will be used for printing messages. Default: `console`.
* @param level The log level. Default: `'info'`.
*/
public constructor(
private readonly logger: ILogger = console,
private level: LogLevel = LogLevel.INFO,
) {}
/**
* Checks if the given value is a supported log level.
*
* @param value The value to check.
* @returns `true` if the given value is a supported log level, otherwise `false`.
*/
public static isSupportedLogLevel(value: unknown): value is LogLevel {
return (
typeof value === 'string' &&
(value === 'debug' ||
value === 'log' ||
value === 'info' ||
value === 'warn' ||
value === 'error' ||
value === 'off')
);
}
/**
* Set the log level to the given level.
*
* @param level The new log level.
*/
public setLogLevel(level: LogLevel): void {
this.level = level;
}
/**
* Whether debugging is enabled or not.
*
* @returns `true` if debug level is enabled, otherwise `false`.
*/
public isDebugEnabled(): boolean {
return this.level <= LogLevel.DEBUG;
}
/**
* Prints the given message as a debug log entry.
*
* @param message The message to print.
* @param optionalParams Optional arguments.
*/
public debug(message?: unknown, ...optionalParams: any[]): void {
this.message(LogLevel.DEBUG, message, ...optionalParams);
}
/**
* Prints the given message as a log entry.
*
* @param message The message to print.
* @param optionalParams Optional arguments.
*/
public log(message?: unknown, ...optionalParams: any[]): void {
this.message(LogLevel.LOG, message, ...optionalParams);
}
/**
* Prints the given message as a info log entry.
*
* @param message The message to print.
* @param optionalParams Optional arguments.
*/
public info(message?: unknown, ...optionalParams: any[]): void {
this.message(LogLevel.INFO, message, ...optionalParams);
}
/**
* Prints the given message as a warn log entry.
*
* @param message The message to print.
* @param optionalParams Optional arguments.
*/
public warn(message?: unknown, ...optionalParams: any[]): void {
this.message(LogLevel.WARN, message, ...optionalParams);
}
/**
* Prints the given message as a error log entry.
*
* @param message The message to print.
* @param optionalParams Optional arguments.
*/
public error(message?: unknown, ...optionalParams: any[]): void {
this.message(LogLevel.ERROR, message, ...optionalParams);
}
private message(
level: LogLevel,
message?: any,
...optionalParams: any[]
): void {
if (
this.level !== LogLevel.OFF &&
this.level <= level &&
level !== LogLevel.OFF
) {
this.logger[level](message, ...optionalParams);
}
}
}
/**
* Constructs a new logger.
*
* @param logger The wrapped logger that will be used for printing messages. Default: console.
* @returns A newly constructed logger.
*/
export function createLogger(logger: ILogger = console): Logger {
return new Logger(logger);
}
/**
* Logger for @prettier/plugin-pug.
*/
export const logger: Logger = createLogger(console);
// Configure the logger based on the environment.
if (process.env.NODE_ENV === 'test') {
logger.setLogLevel(LogLevel.DEBUG);
}
let logLevel: string | undefined = process.env.PRETTIER_PLUGIN_PUG_LOG_LEVEL;
if (logLevel) {
logLevel = logLevel.toLowerCase();
if (Logger.isSupportedLogLevel(logLevel)) {
logger.setLogLevel(logLevel);
}
}