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
28
29
30
31 public class PluginAttributeVisitor extends AbstractPluginVisitor<PluginAttribute> {
32 public PluginAttributeVisitor() {
33 super(PluginAttribute.class);
34 }
35
36 @Override
37 public Object visit(final Configuration configuration, final Node node, final LogEvent event,
38 final StringBuilder log) {
39 final String name = this.annotation.value();
40 final Map<String, String> attributes = node.getAttributes();
41 final String rawValue = removeAttributeValue(attributes, name, this.aliases);
42 final String replacedValue = this.substitutor.replace(event, rawValue);
43 final Object defaultValue = findDefaultValue(event);
44 final Object value = convert(replacedValue, defaultValue);
45 final Object debugValue = this.annotation.sensitive() ? NameUtil.md5(value + this.getClass().getName()) : value;
46 log.append(name).append("=\"").append(debugValue).append('"');
47 return value;
48 }
49
50 private Object findDefaultValue(final LogEvent event) {
51 if (this.conversionType == int.class || this.conversionType == Integer.class) {
52 return this.annotation.defaultInt();
53 }
54 if (this.conversionType == long.class || this.conversionType == Long.class) {
55 return this.annotation.defaultLong();
56 }
57 if (this.conversionType == boolean.class || this.conversionType == Boolean.class) {
58 return this.annotation.defaultBoolean();
59 }
60 if (this.conversionType == float.class || this.conversionType == Float.class) {
61 return this.annotation.defaultFloat();
62 }
63 if (this.conversionType == double.class || this.conversionType == Double.class) {
64 return this.annotation.defaultDouble();
65 }
66 if (this.conversionType == byte.class || this.conversionType == Byte.class) {
67 return this.annotation.defaultByte();
68 }
69 if (this.conversionType == char.class || this.conversionType == Character.class) {
70 return this.annotation.defaultChar();
71 }
72 if (this.conversionType == short.class || this.conversionType == Short.class) {
73 return this.annotation.defaultShort();
74 }
75 if (this.conversionType == Class.class) {
76 return this.annotation.defaultClass();
77 }
78 return this.substitutor.replace(event, this.annotation.defaultString());
79 }
80 }