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 java.util.ArrayList;
22 import java.util.List;
23 import org.apache.logging.log4j.Level;
24 import org.apache.logging.log4j.LogManager;
25 import org.apache.logging.log4j.core.LoggerContext;
26 import org.apache.logging.log4j.core.config.LoggerConfig;
27 import org.apache.syncope.common.lib.types.AuditLoggerName;
28 import org.apache.syncope.core.logic.IdRepoLogicContext;
29 import org.apache.syncope.core.persistence.api.DomainHolder;
30 import org.apache.syncope.ext.opensearch.client.OpenSearchIndexManager;
31 import org.springframework.boot.autoconfigure.AutoConfigureBefore;
32 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
33 import org.springframework.context.annotation.Bean;
34 import org.springframework.context.annotation.Configuration;
35
36 @AutoConfigureBefore(IdRepoLogicContext.class)
37 @Configuration(proxyBeanMethods = false)
38 public class OpenSearchLogicContext {
39
40 @ConditionalOnMissingBean(name = { "defaultAuditAppenders", "openSearchDefaultAuditAppenders" })
41 @Bean
42 public List<AuditAppender> defaultAuditAppenders(
43 final DomainHolder domainHolder,
44 final OpenSearchIndexManager openSearchIndexManager) {
45
46 List<AuditAppender> auditAppenders = new ArrayList<>();
47
48 LoggerContext logCtx = (LoggerContext) LogManager.getContext(false);
49 domainHolder.getDomains().forEach((domain, dataSource) -> {
50 AuditAppender appender = new OpenSearchAuditAppender(domain, openSearchIndexManager);
51
52 LoggerConfig logConf = new LoggerConfig(AuditLoggerName.getAuditLoggerName(domain), null, false);
53 logConf.addAppender(appender.getTargetAppender(), Level.DEBUG, null);
54 logConf.setLevel(Level.DEBUG);
55 logCtx.getConfiguration().addLogger(logConf.getName(), logConf);
56
57 auditAppenders.add(appender);
58 });
59
60 return auditAppenders;
61 }
62 }