1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.appender.routing;
18
19 import org.apache.logging.log4j.Logger;
20 import org.apache.logging.log4j.core.config.Node;
21 import org.apache.logging.log4j.core.config.plugins.Plugin;
22 import org.apache.logging.log4j.core.config.plugins.PluginAttr;
23 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
24 import org.apache.logging.log4j.core.config.plugins.PluginNode;
25 import org.apache.logging.log4j.status.StatusLogger;
26
27
28
29
30 @Plugin(name = "Route", category = "Core", printObject = true, deferChildren = true)
31 public final class Route {
32 private static final Logger LOGGER = StatusLogger.getLogger();
33
34 private final Node node;
35 private final String appenderRef;
36 private final String key;
37
38 private Route(final Node node, final String appenderRef, final String key) {
39 this.node = node;
40 this.appenderRef = appenderRef;
41 this.key = key;
42 }
43
44
45
46
47
48 public Node getNode() {
49 return node;
50 }
51
52
53
54
55
56 public String getAppenderRef() {
57 return appenderRef;
58 }
59
60
61
62
63
64 public String getKey() {
65 return key;
66 }
67
68 @Override
69 public String toString() {
70 final StringBuilder sb = new StringBuilder("Route(");
71 sb.append("type=");
72 if (appenderRef != null) {
73 sb.append("static Reference=").append(appenderRef);
74 } else if (node != null) {
75 sb.append("dynamic - type=").append(node.getName());
76 } else {
77 sb.append("invalid Route");
78 }
79 if (key != null) {
80 sb.append(" key='").append(key).append("'");
81 } else {
82 sb.append(" default");
83 }
84 sb.append(")");
85 return sb.toString();
86 }
87
88
89
90
91
92
93
94
95 @PluginFactory
96 public static Route createRoute(@PluginAttr("ref") final String appenderRef,
97 @PluginAttr("key") final String key,
98 @PluginNode final Node node) {
99 if (node != null && node.hasChildren()) {
100 for (final Node child : node.getChildren()) {
101
102 }
103 if (appenderRef != null) {
104 LOGGER.error("A route cannot be configured with an appender reference and an appender definition");
105 return null;
106 }
107 } else {
108 if (appenderRef == null) {
109 LOGGER.error("A route must specify an appender reference or an appender definition");
110 return null;
111 }
112 }
113 return new Route(node, appenderRef, key);
114 }
115 }