1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.appender.rewrite;
18
19 import java.util.HashMap;
20 import java.util.Locale;
21 import java.util.Map;
22
23 import org.apache.logging.log4j.Level;
24 import org.apache.logging.log4j.core.Core;
25 import org.apache.logging.log4j.core.LogEvent;
26 import org.apache.logging.log4j.core.config.plugins.Plugin;
27 import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
28 import org.apache.logging.log4j.core.config.plugins.PluginElement;
29 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
30 import org.apache.logging.log4j.core.impl.Log4jLogEvent;
31 import org.apache.logging.log4j.core.util.KeyValuePair;
32
33
34
35
36
37
38 @Plugin(name = "LoggerNameLevelRewritePolicy", category = Core.CATEGORY_NAME, elementType = "rewritePolicy", printObject = true)
39 public class LoggerNameLevelRewritePolicy implements RewritePolicy {
40
41
42
43
44
45
46
47
48
49
50
51 @PluginFactory
52 public static LoggerNameLevelRewritePolicy createPolicy(
53
54 @PluginAttribute("logger") final String loggerNamePrefix,
55 @PluginElement("KeyValuePair") final KeyValuePair[] levelPairs) {
56
57 final Map<Level, Level> newMap = new HashMap<>(levelPairs.length);
58 for (final KeyValuePair keyValuePair : levelPairs) {
59 newMap.put(getLevel(keyValuePair.getKey()), getLevel(keyValuePair.getValue()));
60 }
61 return new LoggerNameLevelRewritePolicy(loggerNamePrefix, newMap);
62 }
63
64 private static Level getLevel(final String name) {
65 return Level.getLevel(name.toUpperCase(Locale.ROOT));
66 }
67
68 private final String loggerName;
69
70 private final Map<Level, Level> map;
71
72 private LoggerNameLevelRewritePolicy(final String loggerName, final Map<Level, Level> map) {
73 super();
74 this.loggerName = loggerName;
75 this.map = map;
76 }
77
78 @Override
79 public LogEvent rewrite(final LogEvent event) {
80 if (event.getLoggerName() == null || !event.getLoggerName().startsWith(loggerName)) {
81 return event;
82 }
83 final Level sourceLevel = event.getLevel();
84 final Level newLevel = map.get(sourceLevel);
85 if (newLevel == null || newLevel == sourceLevel) {
86 return event;
87 }
88 final LogEvent result = new Log4jLogEvent.Builder(event).setLevel(newLevel).build();
89 return result;
90 }
91
92 }