forked from microsoft/vscode-python
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlevels.ts
More file actions
103 lines (94 loc) · 2.96 KB
/
levels.ts
File metadata and controls
103 lines (94 loc) · 2.96 KB
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
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
'use strict';
// IMPORTANT: This file should only be importing from the '../client/logging' directory, as we
// delete everything in '../client' except for '../client/logging' before running smoke tests.
import * as winston from 'winston';
//======================
// Our custom log levels
export enum LogLevel {
// Larger numbers are higher priority.
Error = 40,
Warn = 30,
Info = 20,
Debug = 10,
Trace = 5,
}
export type LogLevelName = 'ERROR' | 'WARNING' | 'INFORMATION' | 'DEBUG' | 'DEBUG-TRACE';
const logLevelMap: { [K in LogLevel]: LogLevelName } = {
[LogLevel.Error]: 'ERROR',
[LogLevel.Warn]: 'WARNING',
[LogLevel.Info]: 'INFORMATION',
[LogLevel.Debug]: 'DEBUG',
[LogLevel.Trace]: 'DEBUG-TRACE',
};
// This can be used for winston.LoggerOptions.levels.
const configLevels: winston.config.AbstractConfigSetLevels = {
ERROR: 0,
WARNING: 1,
INFORMATION: 2,
DEBUG: 4,
'DEBUG-TRACE': 5,
};
//======================
// Other log levels
// The level names from winston/config.npm.
// See: https://www.npmjs.com/package/winston#logging-levels
type NPMLogLevelName = 'error' | 'warn' | 'info' | 'verbose' | 'debug' | 'silly';
const npmLogLevelMap: { [K in LogLevel]: NPMLogLevelName } = {
[LogLevel.Error]: 'error',
[LogLevel.Warn]: 'warn',
[LogLevel.Info]: 'info',
[LogLevel.Debug]: 'debug',
[LogLevel.Trace]: 'silly',
};
//======================
// lookup functions
// Convert from LogLevel enum to the proper level name.
export function resolveLevelName(
level: LogLevel,
// Default to configLevels.
levels?: winston.config.AbstractConfigSetLevels,
): string | undefined {
if (levels === undefined) {
return getLevelName(level);
} else if (levels === configLevels) {
return getLevelName(level);
} else if (levels === winston.config.npm.levels) {
return npmLogLevelMap[level];
} else {
return undefined;
}
}
function getLevelName(level: LogLevel): LogLevelName | undefined {
return logLevelMap[level];
}
// Convert from a level name to the actual level.
export function resolveLevel(
levelName: string,
// Default to configLevels.
levels?: winston.config.AbstractConfigSetLevels,
): LogLevel | undefined {
let levelMap: { [K in LogLevel]: string };
if (levels === undefined) {
levelMap = logLevelMap;
} else if (levels === configLevels) {
levelMap = logLevelMap;
} else if (levels === winston.config.npm.levels) {
levelMap = npmLogLevelMap;
} else {
return undefined;
}
for (const level of Object.keys(levelMap)) {
if (typeof level === 'string') {
continue;
}
if (logLevelMap[level] === levelName) {
return level;
}
}
return undefined;
}
export function getLevel(name: LogLevelName): LogLevel | undefined {
return resolveLevel(name);
}