1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.logging.log4j.core.config.plugins.visitors;
19
20 import java.util.Map;
21
22 import org.apache.logging.log4j.core.LogEvent;
23 import org.apache.logging.log4j.core.config.Configuration;
24 import org.apache.logging.log4j.core.config.Node;
25 import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
26 import org.apache.logging.log4j.core.util.NameUtil;
27 import org.apache.logging.log4j.util.StringBuilders;
28
29
30
31
32 public class PluginAttributeVisitor extends AbstractPluginVisitor<PluginAttribute> {
33 public PluginAttributeVisitor() {
34 super(PluginAttribute.class);
35 }
36
37 @Override
38 public Object visit(final Configuration configuration, final Node node, final LogEvent event,
39 final StringBuilder log) {
40 final String name = this.annotation.value();
41 final Map<String, String> attributes = node.getAttributes();
42 final String rawValue = removeAttributeValue(attributes, name, this.aliases);
43 final String replacedValue = this.substitutor.replace(event, rawValue);
44 final Object defaultValue = findDefaultValue(event);
45 final Object value = convert(replacedValue, defaultValue);
46 final Object debugValue = this.annotation.sensitive() ? NameUtil.md5(value + this.getClass().getName()) : value;
47 StringBuilders.appendKeyDqValue(log, "name", debugValue);
48 return value;
49 }
50
51 private Object findDefaultValue(final LogEvent event) {
52 if (this.conversionType == int.class || this.conversionType == Integer.class) {
53 return this.annotation.defaultInt();
54 }
55 if (this.conversionType == long.class || this.conversionType == Long.class) {
56 return this.annotation.defaultLong();
57 }
58 if (this.conversionType == boolean.class || this.conversionType == Boolean.class) {
59 return this.annotation.defaultBoolean();
60 }
61 if (this.conversionType == float.class || this.conversionType == Float.class) {
62 return this.annotation.defaultFloat();
63 }
64 if (this.conversionType == double.class || this.conversionType == Double.class) {
65 return this.annotation.defaultDouble();
66 }
67 if (this.conversionType == byte.class || this.conversionType == Byte.class) {
68 return this.annotation.defaultByte();
69 }
70 if (this.conversionType == char.class || this.conversionType == Character.class) {
71 return this.annotation.defaultChar();
72 }
73 if (this.conversionType == short.class || this.conversionType == Short.class) {
74 return this.annotation.defaultShort();
75 }
76 if (this.conversionType == Class.class) {
77 return this.annotation.defaultClass();
78 }
79 return this.substitutor.replace(event, this.annotation.defaultString());
80 }
81 }