1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.appender.nosql;
18
19 import java.io.Serializable;
20
21 import org.apache.logging.log4j.core.Appender;
22 import org.apache.logging.log4j.core.Filter;
23 import org.apache.logging.log4j.core.Layout;
24 import org.apache.logging.log4j.core.appender.AbstractAppender;
25 import org.apache.logging.log4j.core.appender.db.AbstractDatabaseAppender;
26 import org.apache.logging.log4j.core.config.Property;
27 import org.apache.logging.log4j.core.config.plugins.Plugin;
28 import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute;
29 import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory;
30 import org.apache.logging.log4j.core.config.plugins.PluginElement;
31 import org.apache.logging.log4j.core.util.Booleans;
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 @Plugin(name = "NoSql", category = "Core", elementType = Appender.ELEMENT_TYPE, printObject = true)
47 public final class NoSqlAppender extends AbstractDatabaseAppender<NoSqlDatabaseManager<?>> {
48
49
50
51
52
53
54
55 public static class Builder<B extends Builder<B>> extends AbstractAppender.Builder<B>
56 implements org.apache.logging.log4j.core.util.Builder<NoSqlAppender> {
57
58 @PluginBuilderAttribute("bufferSize")
59 private int bufferSize;
60
61 @PluginElement("NoSqlProvider")
62 private NoSqlProvider<?> provider;
63
64 @SuppressWarnings("resource")
65 @Override
66 public NoSqlAppender build() {
67 final String name = getName();
68 if (provider == null) {
69 LOGGER.error("NoSQL provider not specified for appender [{}].", name);
70 return null;
71 }
72
73 final String managerName = "noSqlManager{ description=" + name + ", bufferSize=" + bufferSize
74 + ", provider=" + provider + " }";
75
76 final NoSqlDatabaseManager<?> manager = NoSqlDatabaseManager.getNoSqlDatabaseManager(managerName,
77 bufferSize, provider);
78 if (manager == null) {
79 return null;
80 }
81
82 return new NoSqlAppender(name, getFilter(), getLayout(), isIgnoreExceptions(), getPropertyArray(), manager);
83 }
84
85
86
87
88
89
90
91
92
93 public B setBufferSize(final int bufferSize) {
94 this.bufferSize = bufferSize;
95 return asBuilder();
96 }
97
98
99
100
101
102
103
104
105 public B setProvider(final NoSqlProvider<?> provider) {
106 this.provider = provider;
107 return asBuilder();
108 }
109 }
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129 @SuppressWarnings("resource")
130 @Deprecated
131 public static NoSqlAppender createAppender(
132
133 final String name,
134 final String ignore,
135 final Filter filter,
136 final String bufferSize,
137 final NoSqlProvider<?> provider) {
138
139 if (provider == null) {
140 LOGGER.error("NoSQL provider not specified for appender [{}].", name);
141 return null;
142 }
143
144 final int bufferSizeInt = AbstractAppender.parseInt(bufferSize, 0);
145 final boolean ignoreExceptions = Booleans.parseBoolean(ignore, true);
146
147 final String managerName = "noSqlManager{ description=" + name + ", bufferSize=" + bufferSizeInt + ", provider="
148 + provider + " }";
149
150 final NoSqlDatabaseManager<?> manager = NoSqlDatabaseManager.getNoSqlDatabaseManager(managerName, bufferSizeInt,
151 provider);
152 if (manager == null) {
153 return null;
154 }
155
156 return new NoSqlAppender(name, filter, null, ignoreExceptions, null, manager);
157 }
158
159 @PluginBuilderFactory
160 public static <B extends Builder<B>> B newBuilder() {
161 return new Builder<B>().asBuilder();
162 }
163
164 private final String description;
165
166 private NoSqlAppender(final String name, final Filter filter, final Layout<? extends Serializable> layout,
167 final boolean ignoreExceptions, final Property[] properties, final NoSqlDatabaseManager<?> manager) {
168 super(name, filter, layout, ignoreExceptions, properties, manager);
169 this.description = this.getName() + "{ manager=" + this.getManager() + " }";
170 }
171
172 @Override
173 public String toString() {
174 return this.description;
175 }
176 }