1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.core.logic.audit;
20
21 import com.fasterxml.jackson.databind.JsonNode;
22 import java.io.Serializable;
23 import org.apache.logging.log4j.core.Filter;
24 import org.apache.logging.log4j.core.Layout;
25 import org.apache.logging.log4j.core.LogEvent;
26 import org.apache.logging.log4j.core.appender.AbstractAppender;
27 import org.apache.logging.log4j.core.config.Property;
28 import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory;
29 import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
30 import org.apache.syncope.ext.opensearch.client.OpenSearchIndexManager;
31
32 public class OpenSearchAppender extends AbstractAppender {
33
34 public static class Builder extends AbstractAppender.Builder<Builder>
35 implements org.apache.logging.log4j.core.util.Builder<OpenSearchAppender> {
36
37 private OpenSearchIndexManager openSearchIndexManager;
38
39 private String domain;
40
41 public OpenSearchAppender.Builder setDomain(final String domain) {
42 this.domain = domain;
43 return this;
44 }
45
46 public OpenSearchAppender.Builder setIndexManager(
47 final OpenSearchIndexManager openSearchIndexManager) {
48
49 this.openSearchIndexManager = openSearchIndexManager;
50 return this;
51 }
52
53 @Override
54 public OpenSearchAppender build() {
55 if (domain == null || openSearchIndexManager == null) {
56 LOGGER.error("Cannot create OpenSearchAppender without Domain or IndexManager.");
57 return null;
58 }
59 return new OpenSearchAppender(
60 getName(), getFilter(), getLayout(), isIgnoreExceptions(), domain, openSearchIndexManager);
61 }
62 }
63
64 @PluginBuilderFactory
65 public static Builder newBuilder() {
66 return new Builder();
67 }
68
69 private final String domain;
70
71 protected final OpenSearchIndexManager openSearchIndexManager;
72
73 protected OpenSearchAppender(
74 final String name,
75 final Filter filter,
76 final Layout<? extends Serializable> layout,
77 final boolean ignoreExceptions,
78 final String domain,
79 final OpenSearchIndexManager openSearchIndexManager) {
80
81 super(name, filter, layout, ignoreExceptions, Property.EMPTY_ARRAY);
82 this.domain = domain;
83 this.openSearchIndexManager = openSearchIndexManager;
84 }
85
86 @Override
87 public void append(final LogEvent event) {
88 try {
89 openSearchIndexManager.audit(
90 domain,
91 event.getTimeMillis(),
92 POJOHelper.deserialize(event.getMessage().getFormattedMessage(), JsonNode.class));
93 } catch (Exception e) {
94 LOGGER.error("While requesting to index event for appender [{}]", getName(), e);
95 }
96 }
97 }