From 8788cdb581dc3678e03a7e60aa760f1e52d67a78 Mon Sep 17 00:00:00 2001 From: Sajinie Date: Mon, 27 Jan 2025 11:45:59 +0530 Subject: [PATCH] Add REST method and full URL info to Log mediator message --- .../mediators/builtin/LogMediator.java | 7 ++++++ .../synapse/util/logging/LoggingUtils.java | 22 +++++++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/modules/core/src/main/java/org/apache/synapse/mediators/builtin/LogMediator.java b/modules/core/src/main/java/org/apache/synapse/mediators/builtin/LogMediator.java index e9cbc9f915..e8da643676 100644 --- a/modules/core/src/main/java/org/apache/synapse/mediators/builtin/LogMediator.java +++ b/modules/core/src/main/java/org/apache/synapse/mediators/builtin/LogMediator.java @@ -33,6 +33,7 @@ import org.apache.synapse.mediators.AbstractMediator; import org.apache.synapse.mediators.MediatorProperty; import org.apache.synapse.util.InlineExpressionUtil; +import org.apache.synapse.util.logging.LoggingUtils; import org.apache.synapse.util.xpath.SynapseExpression; import org.jaxen.JaxenException; @@ -114,6 +115,11 @@ public boolean mediate(MessageContext synCtx) { } } + if (this.getLogLevel() == MESSAGE_TEMPLATE) { + // Entry points info should be logged for audit logs only. Hence, the property "logEntryPointInfo" + // should be set at this point just before the audit logs and removed just after audit logs. + synCtx.setProperty(LoggingUtils.LOG_ENTRY_POINT_INFO, "true"); + } switch (category) { case CATEGORY_INFO : synLog.auditLog(getLogMessage(synCtx)); @@ -139,6 +145,7 @@ public boolean mediate(MessageContext synCtx) { break; } + synCtx.getPropertyKeySet().remove(LoggingUtils.LOG_ENTRY_POINT_INFO); synLog.traceOrDebug("End : Log mediator"); return true; diff --git a/modules/core/src/main/java/org/apache/synapse/util/logging/LoggingUtils.java b/modules/core/src/main/java/org/apache/synapse/util/logging/LoggingUtils.java index 09e73cd1a3..1b3340f515 100644 --- a/modules/core/src/main/java/org/apache/synapse/util/logging/LoggingUtils.java +++ b/modules/core/src/main/java/org/apache/synapse/util/logging/LoggingUtils.java @@ -20,7 +20,7 @@ import org.apache.synapse.MessageContext; import org.apache.synapse.SynapseConstants; - +import org.apache.synapse.rest.RESTConstants; /** * Util class to get formatted logs for audit purposes. */ @@ -28,6 +28,7 @@ public class LoggingUtils { private static final String OPEN_BRACKETS = "{"; private static final String CLOSE_BRACKETS = "}"; + public static final String LOG_ENTRY_POINT_INFO = "logEntryPointInfo"; private LoggingUtils() { // do nothing @@ -42,7 +43,7 @@ public static String getFormattedLog(MessageContext synCtx, Object msg) { return getFormattedLog(SynapseConstants.PROXY_SERVICE_TYPE, artifactName.substring(SynapseConstants.PROXY_SERVICE_TYPE.length()), msg); } else if (artifactName.startsWith(SynapseConstants.FAIL_SAFE_MODE_API)) { - return getFormattedLog(SynapseConstants.FAIL_SAFE_MODE_API, + return getFormattedLogForAPI(synCtx, SynapseConstants.FAIL_SAFE_MODE_API, artifactName.substring(SynapseConstants.FAIL_SAFE_MODE_API.length()), msg); } else if (artifactName.startsWith(SynapseConstants.FAIL_SAFE_MODE_INBOUND_ENDPOINT)) { return getFormattedLog(SynapseConstants.FAIL_SAFE_MODE_INBOUND_ENDPOINT, artifactName @@ -53,6 +54,23 @@ public static String getFormattedLog(MessageContext synCtx, Object msg) { return msg.toString(); } + private static String getFormattedLogForAPI(MessageContext synCtx, String artifactType, Object artifactName, + Object msg) { + boolean logEntryPointInfo = Boolean.parseBoolean((String) synCtx.getProperty(LoggingUtils.LOG_ENTRY_POINT_INFO)); + if (!logEntryPointInfo) { + return getFormattedLog(artifactType, artifactName, msg); + } + String name = artifactName != null ? artifactName.toString() : ""; + String artifactInfo = artifactType.concat(":").concat(name); + String method = (String) synCtx.getProperty(RESTConstants.REST_METHOD); + String restFullRequestPath = (String) synCtx.getProperty(RESTConstants.REST_FULL_REQUEST_PATH); + + String apiInfo = String.join(" ", artifactInfo, method != null ? method : "", + restFullRequestPath != null ? restFullRequestPath : "").trim(); + + return getFormattedString(apiInfo, msg); + } + public static String getFormattedLog(String artifactType, Object artifactName, Object msg) { String name = artifactName != null ? artifactName.toString() : "";