@@ -11,22 +11,37 @@ import (
11
11
var SupportedLogLevels map [string ]struct {}
12
12
13
13
// Changing this also needs to change the logContext.ts file
14
- var logLevels = []string {"error" , "warn" , "warning" , "info" , "debug" , "trace" , "severe" , "critical" , "fatal" }
15
- var plainLevels = map [string ]* regexp.Regexp {}
16
- var bracketLevels = map [string ]* regexp.Regexp {}
14
+ var logLevels = [][]string {
15
+ {"error" , "err" },
16
+ {"warn" , "warning" },
17
+ {"info" , "inf" },
18
+ {"debug" , "dbg" },
19
+ {"trace" },
20
+ {"fatal" , "sev" , "severe" , "crit" , "critical" },
21
+ }
22
+
23
+ var plainLevels = map [string ][]* regexp.Regexp {}
24
+ var bracketLevels = map [string ][]* regexp.Regexp {}
25
+ var timestampRegex = regexp .MustCompile (`^(?:\d{4}[-/]\d{2}[-/]\d{2}(?:[T ](?:\d{2}:\d{2}:\d{2}(?:\.\d+)?Z?|\d{2}:\d{2}(?:AM|PM)))?\s+)` )
17
26
18
27
func init () {
19
- for _ , level := range logLevels {
20
- plainLevels [level ] = regexp .MustCompile ("(?i)^" + level + "[^a-z]" )
28
+ for _ , levelGroup := range logLevels {
29
+ first := levelGroup [0 ]
30
+ for _ , level := range levelGroup {
31
+ plainLevels [first ] = append (plainLevels [first ], regexp .MustCompile ("(?i)^" + level + "[^a-z]" ))
32
+ }
21
33
}
22
34
23
- for _ , level := range logLevels {
24
- bracketLevels [level ] = regexp .MustCompile ("(?i)\\ [ ?" + level + " ?\\ ]" )
35
+ for _ , levelGroup := range logLevels {
36
+ first := levelGroup [0 ]
37
+ for _ , level := range levelGroup {
38
+ bracketLevels [first ] = append (bracketLevels [first ], regexp .MustCompile ("(?i)\\ [ ?" + level + " ?\\ ]" ))
39
+ }
25
40
}
26
41
27
42
SupportedLogLevels = make (map [string ]struct {}, len (logLevels )+ 1 )
28
- for _ , level := range logLevels {
29
- SupportedLogLevels [level ] = struct {}{}
43
+ for _ , levelGroup := range logLevels {
44
+ SupportedLogLevels [levelGroup [ 0 ] ] = struct {}{}
30
45
}
31
46
SupportedLogLevels ["unknown" ] = struct {}{}
32
47
}
@@ -35,25 +50,26 @@ func guessLogLevel(logEvent *LogEvent) string {
35
50
switch value := logEvent .Message .(type ) {
36
51
case string :
37
52
value = stripANSI (value )
38
- for _ , level := range logLevels {
53
+ value = timestampRegex .ReplaceAllString (value , "" )
54
+ for _ , levelGroup := range logLevels {
55
+ first := levelGroup [0 ]
39
56
// Look for the level at the beginning of the message
40
- if plainLevels [level ].MatchString (value ) {
41
- return level
57
+ for _ , regex := range plainLevels [first ] {
58
+ if regex .MatchString (value ) {
59
+ return first
60
+ }
42
61
}
43
62
44
63
// Look for the level in brackets
45
- if bracketLevels [level ].MatchString (value ) {
46
- return level
64
+ for _ , regex := range bracketLevels [first ] {
65
+ if regex .MatchString (value ) {
66
+ return first
67
+ }
47
68
}
48
69
49
70
// Look for the level in the middle of the message that are uppercase
50
- if strings .Contains (value , " " + strings .ToUpper (level )+ " " ) {
51
- return level
52
- }
53
-
54
- // Look for levels with equal sign and quotes around them
55
- if strings .Contains (value , level + "=" ) {
56
- return level
71
+ if strings .Contains (value , " " + strings .ToUpper (first )+ " " ) {
72
+ return first
57
73
}
58
74
}
59
75
0 commit comments