diff --git a/native/src/main/java/io/ballerina/stdlib/http/api/logging/HttpLogManager.java b/native/src/main/java/io/ballerina/stdlib/http/api/logging/HttpLogManager.java index e16a74b23..d3f39210e 100644 --- a/native/src/main/java/io/ballerina/stdlib/http/api/logging/HttpLogManager.java +++ b/native/src/main/java/io/ballerina/stdlib/http/api/logging/HttpLogManager.java @@ -18,6 +18,7 @@ package io.ballerina.stdlib.http.api.logging; +import io.ballerina.runtime.api.values.BArray; import io.ballerina.runtime.api.values.BMap; import io.ballerina.runtime.api.values.BString; import io.ballerina.stdlib.http.api.logging.accesslog.HttpAccessLogConfig; @@ -37,6 +38,7 @@ import static io.ballerina.stdlib.http.api.HttpConstants.HTTP_ACCESS_LOG; import static io.ballerina.stdlib.http.api.HttpConstants.HTTP_ACCESS_LOG_ENABLED; +import static io.ballerina.stdlib.http.api.HttpConstants.HTTP_LOG_ATTRIBUTES; import static io.ballerina.stdlib.http.api.HttpConstants.HTTP_LOG_CONSOLE; import static io.ballerina.stdlib.http.api.HttpConstants.HTTP_LOG_FILE_PATH; import static io.ballerina.stdlib.http.api.HttpConstants.HTTP_LOG_FORMAT; @@ -167,11 +169,18 @@ public void setHttpAccessLogHandler(BMap accessLogConfig) { } BString logFormat = accessLogConfig.getStringValue(HTTP_LOG_FORMAT); - if (!(logFormat.getValue().equals(HTTP_LOG_FORMAT_JSON) || logFormat.getValue().equals(HTTP_LOG_FORMAT_FLAT))) { + if (logFormat != null && + !(logFormat.getValue().equals(HTTP_LOG_FORMAT_JSON) || + logFormat.getValue().equals(HTTP_LOG_FORMAT_FLAT))) { stdErr.println("WARNING: Unsupported log format '" + logFormat.getValue() + "'. Defaulting to 'flat' format."); } + BArray logAttributes = accessLogConfig.getArrayValue(HTTP_LOG_ATTRIBUTES); + if (logAttributes != null && logAttributes.getLength() == 0) { + accessLogsEnabled = false; + } + if (accessLogsEnabled) { System.setProperty(HTTP_ACCESS_LOG_ENABLED, "true"); stdErr.println("ballerina: " + protocol + " access log enabled"); diff --git a/native/src/main/java/io/ballerina/stdlib/http/api/logging/accesslog/HttpAccessLogConfig.java b/native/src/main/java/io/ballerina/stdlib/http/api/logging/accesslog/HttpAccessLogConfig.java index 5c02a38d6..d48d0f4c9 100644 --- a/native/src/main/java/io/ballerina/stdlib/http/api/logging/accesslog/HttpAccessLogConfig.java +++ b/native/src/main/java/io/ballerina/stdlib/http/api/logging/accesslog/HttpAccessLogConfig.java @@ -57,9 +57,6 @@ public void initializeHttpAccessLogConfig(BMap accessLogConfig) { public List getCustomHeaders() { List attributes = getAccessLogAttributes(); - if (attributes == null) { - return Collections.emptyList(); - } return attributes.stream() .filter(attr -> attr.startsWith("http_") && !excludedAttributes.contains(attr)) @@ -85,6 +82,6 @@ public List getAccessLogAttributes() { .collect(Collectors.toList()); } } - return null; + return Collections.emptyList(); } } diff --git a/native/src/main/java/io/ballerina/stdlib/http/api/logging/accesslog/HttpAccessLogger.java b/native/src/main/java/io/ballerina/stdlib/http/api/logging/accesslog/HttpAccessLogger.java index b7ee0c5d5..468739fa0 100644 --- a/native/src/main/java/io/ballerina/stdlib/http/api/logging/accesslog/HttpAccessLogger.java +++ b/native/src/main/java/io/ballerina/stdlib/http/api/logging/accesslog/HttpAccessLogger.java @@ -61,8 +61,9 @@ public static void log(HttpAccessLogMessage inboundMessage, List outboundMessages, HttpAccessLogFormat format, List attributes) { + + Map inboundMap = mapAccessLogMessage(inboundMessage, format, attributes); if (format == HttpAccessLogFormat.FLAT) { - Map inboundMap = mapAccessLogMessage(inboundMessage, format, attributes); String inboundFormatted = inboundMap.values().stream() .filter(Objects::nonNull) .collect(Collectors.joining(" ")); @@ -80,7 +81,6 @@ private static String formatAccessLogMessage(HttpAccessLogMessage inboundMessage return inboundFormatted; } } else { - Map inboundMap = mapAccessLogMessage(inboundMessage, format, attributes); Gson gson = new Gson(); JsonObject jsonObject = new JsonObject(); @@ -111,7 +111,7 @@ private static Map mapAccessLogMessage(HttpAccessLogMessage http Map attributeValues = new LinkedHashMap<>(); allAttributes.forEach(attr -> attributeValues.put(attr, null)); - if (attributes != null) { + if (!attributes.isEmpty()) { attributes.forEach(attr -> { attributeValues.put(attr, formatAccessLogAttribute(httpAccessLogMessage, format, attr)); });