1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.pattern;
18
19 import org.apache.logging.log4j.Level;
20 import org.apache.logging.log4j.core.LogEvent;
21 import org.apache.logging.log4j.core.config.plugins.Plugin;
22
23 import java.util.EnumMap;
24 import java.util.Locale;
25
26
27
28
29
30 @Plugin(name = "LevelPatternConverter", type = "Converter")
31 @ConverterKeys({"p", "level" })
32 public final class LevelPatternConverter extends LogEventPatternConverter {
33
34
35
36 private static final LevelPatternConverter INSTANCE = new LevelPatternConverter(null);
37
38 private final EnumMap<Level, String> levelMap;
39
40
41
42
43 private LevelPatternConverter(EnumMap<Level, String> map) {
44 super("Level", "level");
45 this.levelMap = map;
46 }
47
48
49
50
51
52
53
54
55 public static LevelPatternConverter newInstance(final String[] options) {
56 if (options == null || options.length == 0) {
57 return INSTANCE;
58 }
59 EnumMap<Level, String> levelMap = new EnumMap<Level, String>(Level.class);
60 String[] definitions = options[0].split(",");
61 for (String def : definitions) {
62 String[] pair = def.split("=");
63 if (pair == null || pair.length != 2) {
64 LOGGER.error("Invalid option {}", def);
65 continue;
66 }
67 Level level = Level.toLevel(pair[0].trim(), null);
68 if (level == null) {
69 LOGGER.error("Invalid Level {}", pair[0].trim());
70 }
71 levelMap.put(level, pair[1].trim());
72 }
73 if (levelMap.size() == 0) {
74 return INSTANCE;
75 }
76 for (Level level : Level.values()) {
77 if (!levelMap.containsKey(level)) {
78 levelMap.put(level, level.toString());
79 }
80 }
81 return new LevelPatternConverter(levelMap);
82 }
83
84
85
86
87 @Override
88 public void format(final LogEvent event, final StringBuilder output) {
89 output.append(levelMap == null ? event.getLevel().toString() : levelMap.get(event.getLevel()));
90 }
91
92
93
94
95 @Override
96 public String getStyleClass(Object e) {
97 if (e instanceof LogEvent) {
98 Level level = ((LogEvent) e).getLevel();
99
100 switch (level) {
101 case TRACE:
102 return "level trace";
103
104 case DEBUG:
105 return "level debug";
106
107 case INFO:
108 return "level info";
109
110 case WARN:
111 return "level warn";
112
113 case ERROR:
114 return "level error";
115
116 case FATAL:
117 return "level fatal";
118
119 default:
120 return "level " + ((LogEvent) e).getLevel().toString();
121 }
122 }
123
124 return "level";
125 }
126 }