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