aboutsummaryrefslogtreecommitdiffstats
path: root/a1-policy-management/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'a1-policy-management/src/main')
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/BeanFactory.java4
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/AsyncRestClientFactory.java9
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfig.java54
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigParser.java21
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/OtelConfig.java4
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/WebClientConfig.java6
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java15
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/RicRepositoryControllerV3.java14
-rw-r--r--a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/ServiceControllerV3.java4
-rw-r--r--a1-policy-management/src/main/resources/logback-json.xml70
-rw-r--r--a1-policy-management/src/main/resources/logback-plain.xml15
-rw-r--r--a1-policy-management/src/main/resources/logback-stream.xml80
12 files changed, 242 insertions, 54 deletions
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/BeanFactory.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/BeanFactory.java
index 4d1fa331..4d825f85 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/BeanFactory.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/BeanFactory.java
@@ -3,7 +3,7 @@
* ONAP : ccsdk oran
* ======================================================================
* Copyright (C) 2019-2020 Nordix Foundation. All rights reserved.
- * Copyright (C) 2023-2024 OpenInfra Foundation Europe. All rights reserved.
+ * Copyright (C) 2023-2025 OpenInfra Foundation Europe. All rights reserved.
* ======================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -37,7 +37,7 @@ import org.springframework.context.annotation.Configuration;
@Configuration
public class BeanFactory {
- @Value("${server.http-port}")
+ @Value("${server.http-port:0}")
private int httpPort = 0;
@Bean
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/AsyncRestClientFactory.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/AsyncRestClientFactory.java
index 204af9c0..6d642a31 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/AsyncRestClientFactory.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/clients/AsyncRestClientFactory.java
@@ -3,6 +3,8 @@
* ONAP : ccsdk oran
* ======================================================================
* Copyright (C) 2019-2022 Nordix Foundation. All rights reserved.
+ * Modifications Copyright (C) 2025 OpenInfra Foundation Europe.
+ * All rights reserved.
* ======================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -59,7 +61,12 @@ public class AsyncRestClientFactory {
public AsyncRestClientFactory(WebClientConfig clientConfig, SecurityContext securityContext) {
if (clientConfig != null) {
- this.sslContextFactory = new CachingSslContextFactory(clientConfig);
+ if (clientConfig.isSslEnabled()) {
+ this.sslContextFactory = new CachingSslContextFactory(clientConfig);
+ } else {
+ this.sslContextFactory = null;
+ logger.debug("SSL is turned OFF for the web client");
+ }
this.httpProxyConfig = clientConfig.getHttpProxyConfig();
} else {
logger.warn("No configuration for web client defined, HTTPS will not work");
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfig.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfig.java
index 6d8d52de..360369c0 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfig.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfig.java
@@ -3,7 +3,8 @@
* ONAP : ccsdk oran
* ======================================================================
* Copyright (C) 2019-2020 Nordix Foundation. All rights reserved.
- * Modifications Copyright (C) 2023-2025 OpenInfra Foundation Europe. All rights reserved.
+ * Modifications Copyright (C) 2023-2025 OpenInfra Foundation Europe.
+ * All rights reserved.
* ======================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -39,36 +40,40 @@ import reactor.netty.transport.ProxyProvider;
public class ApplicationConfig {
@Getter
- @Value("${app.filepath}")
+ @Value("${app.filepath:null}")
private String localConfigurationFilePath;
@Getter
- @Value("${app.config-file-schema-path:}")
+ @Value("${app.config-file-schema-path:null}")
private String configurationFileSchemaPath;
@Getter
@Value("${app.vardata-directory:null}")
private String vardataDirectory;
- @Value("${server.ssl.key-store-type}")
+ @Getter
+ @Value("${server.ssl.enabled:true}")
+ private boolean sslEnabled;
+
+ @Value("${server.ssl.key-store-type:null}")
private String sslKeyStoreType = "";
- @Value("${server.ssl.key-store-password}")
+ @Value("${server.ssl.key-store-password:null}")
private String sslKeyStorePassword = "";
- @Value("${server.ssl.key-store}")
+ @Value("${server.ssl.key-store:null}")
private String sslKeyStore = "";
- @Value("${server.ssl.key-password}")
+ @Value("${server.ssl.key-password:null}")
private String sslKeyPassword = "";
- @Value("${app.webclient.trust-store-used}")
+ @Value("${app.webclient.trust-store-used:false}")
private boolean sslTrustStoreUsed = false;
- @Value("${app.webclient.trust-store-password}")
+ @Value("${app.webclient.trust-store-password:null}")
private String sslTrustStorePassword = "";
- @Value("${app.webclient.trust-store}")
+ @Value("${app.webclient.trust-store:null}")
private String sslTrustStore = "";
@Value("${app.webclient.http.proxy-host:}")
@@ -133,17 +138,26 @@ public class ApplicationConfig {
.httpProxyPort(this.httpProxyPort) //
.httpProxyType(ProxyProvider.Proxy.valueOf(this.httpProxyType)) //
.build();
+ if (sslEnabled) {
+ this.webClientConfig = WebClientConfig.builder() //
+ .sslEnabled(true)
+ .keyStoreType(this.sslKeyStoreType) //
+ .keyStorePassword(this.sslKeyStorePassword) //
+ .keyStore(this.sslKeyStore) //
+ .keyPassword(this.sslKeyPassword) //
+ .isTrustStoreUsed(this.sslTrustStoreUsed) //
+ .trustStore(this.sslTrustStore) //
+ .trustStorePassword(this.sslTrustStorePassword) //
+ .httpProxyConfig(httpProxyConfig) //
+ .build();
+ } else {
+ this.webClientConfig = WebClientConfig.builder() //
+ .sslEnabled(false)
+ .isTrustStoreUsed(false)
+ .httpProxyConfig(httpProxyConfig) //
+ .build();
+ }
- this.webClientConfig = WebClientConfig.builder() //
- .keyStoreType(this.sslKeyStoreType) //
- .keyStorePassword(this.sslKeyStorePassword) //
- .keyStore(this.sslKeyStore) //
- .keyPassword(this.sslKeyPassword) //
- .isTrustStoreUsed(this.sslTrustStoreUsed) //
- .trustStore(this.sslTrustStore) //
- .trustStorePassword(this.sslTrustStorePassword) //
- .httpProxyConfig(httpProxyConfig) //
- .build();
}
return this.webClientConfig;
}
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigParser.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigParser.java
index f5f0f7e7..24c1d258 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigParser.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/ApplicationConfigParser.java
@@ -2,7 +2,7 @@
* ========================LICENSE_START=================================
* ONAP : ccsdk oran
* ======================================================================
- * Copyright (C) 2019-2020 Nordix Foundation. All rights reserved.
+ * Copyright (C) 2019-2025 OpenInfra Foundation Europe. All rights reserved.
* ======================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -148,13 +148,20 @@ public class ApplicationConfigParser {
"Configuration error, controller configuration not found: " + controllerName);
}
- RicConfig ricConfig = RicConfig.builder() //
- .ricId(get(ricJsonObj, "name", "id", "ricId").getAsString()) //
- .baseUrl(get(ricJsonObj, "baseUrl").getAsString()) //
- .managedElementIds(parseManagedElementIds(get(ricJsonObj, "managedElementIds").getAsJsonArray())) //
+ RicConfig.RicConfigBuilder ricConfigBuilder = RicConfig.builder()
+ .ricId(get(ricJsonObj, "name", "id", "ricId").getAsString())
+ .baseUrl(get(ricJsonObj, "baseUrl").getAsString())
.controllerConfig(controllerConfig)
- .customAdapterClass(getString(ricJsonObj, "customAdapterClass", "")) //
- .build();
+ .customAdapterClass(getString(ricJsonObj, "customAdapterClass", ""));
+
+ if (ricJsonObj.has("managedElementIds")) {
+ ricConfigBuilder
+ .managedElementIds(parseManagedElementIds(get(ricJsonObj, "managedElementIds").getAsJsonArray()));
+ } else {
+ ricConfigBuilder.managedElementIds(null);
+ }
+
+ RicConfig ricConfig = ricConfigBuilder.build();
if (!ricConfig.getBaseUrl().isEmpty()) {
result.add(ricConfig);
} else {
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/OtelConfig.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/OtelConfig.java
index ba8e7a1d..194cf8c5 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/OtelConfig.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/OtelConfig.java
@@ -2,7 +2,7 @@
* ========================LICENSE_START=================================
* ONAP : ccsdk oran
* ======================================================================
- * Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
+ * Copyright (C) 2024-2025 OpenInfra Foundation Europe. All rights reserved.
* ======================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -29,7 +29,7 @@ import io.opentelemetry.sdk.extension.trace.jaeger.sampler.JaegerRemoteSampler;
import io.opentelemetry.sdk.trace.samplers.Sampler;
import java.time.Duration;
-import javax.annotation.PostConstruct;
+import jakarta.annotation.PostConstruct;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/WebClientConfig.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/WebClientConfig.java
index ab2958c6..1f22d995 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/WebClientConfig.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/configuration/WebClientConfig.java
@@ -3,6 +3,8 @@
* ONAP : ccsdk oran
* ======================================================================
* Copyright (C) 2020-2023 Nordix Foundation. All rights reserved.
+ * Modifications Copyright (C) 2025 OpenInfra Foundation Europe.
+ * All rights reserved.
* ======================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -23,13 +25,15 @@ package org.onap.ccsdk.oran.a1policymanagementservice.configuration;
import lombok.Builder;
import lombok.Getter;
import lombok.ToString;
-
import reactor.netty.transport.ProxyProvider;
@Builder
@Getter
@ToString
public class WebClientConfig {
+
+ private boolean sslEnabled;
+
private String keyStoreType;
private String keyStorePassword;
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java
index 53abcd71..ee3ce6d2 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/RicRepositoryController.java
@@ -41,9 +41,7 @@ import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
@RestController("ricRepositoryControllerV2")
@RequiredArgsConstructor
@@ -124,9 +122,16 @@ public class RicRepositoryController implements NearRtRicRepositoryApi {
}
private RicInfo toRicInfo(Ric ric) {
- return new RicInfo().ricId(ric.id())
- .managedElementIds((List<String>) ric.getManagedElementIds())
+ RicInfo ricInfo = new RicInfo().ricId(ric.id())
.policytypeIds((List<String>) ric.getSupportedPolicyTypeNames())
.state(toRicState(ric.getState()));
+
+ if (ric.getConfig().getManagedElementIds() == null) {
+ ricInfo.setManagedElementIds(new ArrayList<>());
+ } else {
+ ricInfo.managedElementIds((List<String>) ric.getConfig().getManagedElementIds());
+ }
+
+ return ricInfo;
}
}
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/RicRepositoryControllerV3.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/RicRepositoryControllerV3.java
index ce2769e6..ff33c7c9 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/RicRepositoryControllerV3.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/RicRepositoryControllerV3.java
@@ -40,8 +40,7 @@ import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
@RestController("ricRepositoryControllerV3")
@RequiredArgsConstructor
@@ -93,10 +92,17 @@ public class RicRepositoryControllerV3 implements NearRtRicRepositoryApi {
}
private RicInfo toRicInfo(Ric ric) {
- return new RicInfo().ricId(ric.id())
- .managedElementIds((List<String>) ric.getManagedElementIds())
+ RicInfo ricInfo = new RicInfo().ricId(ric.id())
.policyTypeIds((List<String>) ric.getSupportedPolicyTypeNames())
.state(toRicState(ric.getState()));
+
+ if (ric.getConfig().getManagedElementIds() == null) {
+ ricInfo.setManagedElementIds(new ArrayList<>());
+ } else {
+ ricInfo.managedElementIds((List<String>) ric.getConfig().getManagedElementIds());
+ }
+
+ return ricInfo;
}
private RicInfo.StateEnum toRicState(Ric.RicState state) {
diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/ServiceControllerV3.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/ServiceControllerV3.java
index d29e37a6..81d864fa 100644
--- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/ServiceControllerV3.java
+++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v3/ServiceControllerV3.java
@@ -2,7 +2,7 @@
* ========================LICENSE_START=================================
* ONAP : ccsdk oran
* ======================================================================
- * Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.
+ * Copyright (C) 2024-2025 OpenInfra Foundation Europe. All rights reserved.
* ======================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -67,7 +67,7 @@ public class ServiceControllerV3 implements ServiceRegistryAndSupervisionApi {
}
@Override
- public Mono<ResponseEntity<Object>> keepAliveService(String serviceId, String accept, Mono<String> body, ServerWebExchange exchange) throws Exception {
+ public Mono<ResponseEntity<Object>> keepAliveService(String serviceId, String accept, ServerWebExchange exchange) throws Exception {
return serviceController.keepAliveService(serviceId, exchange);
}
diff --git a/a1-policy-management/src/main/resources/logback-json.xml b/a1-policy-management/src/main/resources/logback-json.xml
new file mode 100644
index 00000000..3c22aeac
--- /dev/null
+++ b/a1-policy-management/src/main/resources/logback-json.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ============LICENSE_START=======================================================
+ Copyright (C) 2025 OpenInfra Foundation Europe
+ ================================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ SPDX-License-Identifier: Apache-2.0
+ ============LICENSE_END=========================================================
+ -->
+<configuration>
+ <appender name="json" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
+ <providers>
+ <version>
+ <fieldName>version</fieldName>
+ <version>1.2.0</version>
+ </version>
+ <timestamp>
+ <fieldName>timestamp</fieldName>
+ <pattern>yyyy-MM-dd'T'HH:mm:ss.SSSZ</pattern>
+ </timestamp>
+ <pattern>
+ <omitEmptyFields>true</omitEmptyFields>
+ <pattern>
+ {
+ "service_id": "${SERVICE_ID:-a1pms}",
+ "message": "%msg",
+ "facility": "%X{facility}",
+ "subject": "%X{subject}",
+ "extra_data": {
+ "logger": "%logger",
+ "thread_info": {
+ "thread_name": "%thread"
+ },
+ "dst": {
+ "trace_id": "%mdc{traceId}"
+ },
+ "exception": {
+ "stack_trace": "%xEx"
+ }
+ },
+ "metadata": {
+ "application_id": "${APP_ID:-a1pms}"
+ }
+ }
+ </pattern>
+ </pattern>
+ </providers>
+
+ </encoder>
+ </appender>
+
+ <root level="${ROOT_LOG_LEVEL:-INFO}">
+ <appender-ref ref="json"/>
+ </root>
+
+ <logger name="/" level="${ROOT_LOG_LEVEL:-INFO}"/>
+</configuration>
+
diff --git a/a1-policy-management/src/main/resources/logback-plain.xml b/a1-policy-management/src/main/resources/logback-plain.xml
index 0340cce8..014a983a 100644
--- a/a1-policy-management/src/main/resources/logback-plain.xml
+++ b/a1-policy-management/src/main/resources/logback-plain.xml
@@ -19,22 +19,17 @@
~
-->
<configuration>
-
- <!-- Define a plain text console appender -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{55} - <!--
- -->%replace(%X{facility}){'^(.+)$','facility=$1 | '} <!--
- -->%replace(%X{subject}){'^(.+)$','subject=$1 | ' } <!--
- -->%msg%n</pattern>
+ <pattern>
+ %d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} [%thread] %-5level %logger - %msg [facility=%X{facility}, subject=%X{subject}, traceId=%mdc{traceId}] %n%xEx
+ </pattern>
</encoder>
</appender>
-
-
- <!-- Configure root logger to use the plain text console appender for all log levels -->
- <root level="INFO">
+ <root level="${ROOT_LOG_LEVEL:-INFO}">
<appender-ref ref="console"/>
</root>
+ <logger name="/" level="${ROOT_LOG_LEVEL:-INFO}"/>
</configuration> \ No newline at end of file
diff --git a/a1-policy-management/src/main/resources/logback-stream.xml b/a1-policy-management/src/main/resources/logback-stream.xml
new file mode 100644
index 00000000..9cfb863b
--- /dev/null
+++ b/a1-policy-management/src/main/resources/logback-stream.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ============LICENSE_START=======================================================
+ Copyright (C) 2025 OpenInfra Foundation Europe
+ ================================================================================
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ SPDX-License-Identifier: Apache-2.0
+ ============LICENSE_END=========================================================
+ -->
+<configuration>
+ <appender name="json" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
+ <destination>localhost:5044</destination>
+ <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
+ <providers>
+ <version>
+ <fieldName>version</fieldName>
+ <version>1.2.0</version>
+ </version>
+ <timestamp>
+ <fieldName>timestamp</fieldName>
+ <pattern>yyyy-MM-dd'T'HH:mm:ss.SSSZ</pattern>
+ </timestamp>
+ <pattern>
+ <omitEmptyFields>true</omitEmptyFields>
+ <pattern>
+ {
+ "service_id": "${SERVICE_ID:-a1pms}",
+ "message": "%msg",
+ "facility": "%X{facility}",
+ "subject": "%X{subject}",
+ "extra_data": {
+ "logger": "%logger",
+ "thread_info": {
+ "thread_name": "%thread"
+ },
+ "dst": {
+ "trace_id": "%mdc{traceId}"
+ },
+ "exception": {
+ "stack_trace": "%xEx"
+ }
+ },
+ "metadata": {
+ "application_id": "${APP_ID:-a1pms}"
+ }
+ }
+ </pattern>
+ </pattern>
+ </providers>
+
+ </encoder>
+ </appender>
+
+ <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder>
+ <pattern>
+ %d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} [%thread] %-5level %logger - %msg [facility=%X{facility}, subject=%X{subject}, traceId=%mdc{traceId}] %n%xEx
+ </pattern>
+ </encoder>
+ </appender>
+
+ <root level="${ROOT_LOG_LEVEL:-INFO}">
+ <appender-ref ref="json"/>
+ <appender-ref ref="console"/>
+ </root>
+
+ <logger name="/" level="${ROOT_LOG_LEVEL:-INFO}"/>
+</configuration>
+