Container Logs

Container or Trace logs provide visibility into the lifecycle of requests as they move through the Akana gateway and backend services.

On this page:

Indented trace logs

Akana container logs use an indented log format by default.

Indented trace logs provide a structured and hierarchical representation of how the gateway processes an API request. Instead of listing independent log entries, the gateway groups related trace entries together and displays them with indentation to represent the execution flow of the request.

This format makes it easier to visualize the sequence of operations performed during a request processing, such as policy execution, routing decisions, backend invocations, response transformations, and error handling.

Disable default container logs

If you configure Akana to capture container logs in another supported log format, such as JSON or the Elasticsearch log appender, then you can disable the default container logs.

To disable the Log4j indented rolling trace log appender, locate and open the disable-log-appender-configurator.json file in the recipe directory.

The following shows an existing content of the disable-log-appender-configurator.json.

Copy
{
  "name":"Disable log appender configurator",
  "description":"log appender configurator to [ disable ] log4j appenders. Default is to disable json rolling appender for container log. Here you can change the type:object inside delete to disable other loggers as well ",
  "phases":["finalize"],
  "configurations":[
    {
      "pid":"com.soa.log",
      "delete":{
        "rootLogger.appenderRef.jsonRolling.ref":"null"
      }
    }
  ]
}

Replace:

"rootLogger.appenderRef.jsonRolling.ref":"jsonRolling" with "rootLogger.appenderRef.rolling.ref":"null"

Run the recipe by using the following structure:

./jython.sh -m akana.container --recipe ../recipes/disable-log-appender-configurator.json --name <container-name> --home <application-runtime-path>

The recipe ensures that all other logger‑related properties in the com.soa.log configuration remain unchanged.

Enable indented rolling trace log appender

To enable the indented rolling trace log appender, update the enable-log-appender-configurator.json in the recipe directory.

The following shows an existing content of the enable-log-appender-configurator.json.

Copy
{
  "name":"Enable log appender configurator",
  "description":"log appender configurator to [ enable ] log4j appenders. Default is to enable jsonRolling appender for container log. Here you can change the type:object inside update to enable other loggers as well ",
  "phases":["finalize"],
  "configurations":[
    {
      "pid":"com.soa.log",
      "update":{
        "rootLogger.appenderRef.jsonRolling.ref":"jsonRolling"
      }
    }
  ]
}

Replace:

"rootLogger.appenderRef.jsonRolling.ref":"jsonRolling" with "rootLogger.appenderRef.rolling.ref":"rolling"

Run the recipe by using the following structure:

./jython.sh -m akana.container --recipe ../recipes/enable-log-appender-configurator.json --name <container-name> --home <application-runtime-path>

Other properties related to this logger remain in the com.soa.log configuration.

OOTB (Out‑of‑the‑Box) Indented log format

The out‑of‑the‑box (OOTB) indented log format is configured by using a Log4j2 pattern layout (Apache Log4j 2 – Pattern Layout).

You can view the default pattern in the Admin Console under com.soa.logappender.rolling.layout.pattern property.

The default pattern includes the following fields:

%d %p{length=5} [%t] %c{1} - %m%n

where:

  • %d - Date Time
  • %p – Log level
  • [%t] – Thread name
  • %c – Name of the class that generated the log event
  • %m – Log message associated with the logging event
  • %n – Line separator

The default log appears in the following format:

Copy
2026-03-13 12:55:52,200 WARN [Jetty Worker Thread [akana-qa-115.aws.akana.roguewave.com:9903]-2] HttpContextHandlerImpl - Start [Handling request for [/pet]]
    [0] Start [com.soa.transport.jetty.JettyTransportBinding.handle target [/pet] method [POST]]
        [0] com.soa.transport.jetty.JettyTransportBinding.getListenerEndpoint(Request request)
    .....
        [0] com.soa.message.VirtualHostEndpointSelector.select(List<Endpoint> endpoints, Exchange exchange)
            [0] There is only one endpoint and hence skipping virtualhost check and returing that endpoint.
            [0] Start [com.soa.jbi.component.http.operation.OperationFinder.findOperation(Exchange exchange)]
                [0] Incoming request URL: POST https://akana-qa-115.aws.akana.roguewave.com:9903/api10173live/pet
                [0] Trying to find operation match on service [{Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live] in endpoint: com.soa.message.Endpoint[serviceName={Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live, endpointName='https1768817363', address=https://akana-qa-115.aws.akana.roguewave.com:9903/api10173live, bindingName={Swagger_Petstore_1.0.7}Swagger_Petstore_Binding_0_4205608, interfaceName={Swagger_Petstore_1.0.7}Swagger_Petstore_PortType_0_2564132, virtualHost=akana-qa-115.aws.akana.roguewave.com]
                [0] com.soa.jbi.component.http.operation.OperationFinder.filterByPath(List<OperationInfo> operations, ExchangeInspector inspector)
                [1] Locations for operation [getOrderById]: 
    ....
            [1] End [com.soa.jbi.component.http.operation.OperationFinder.findOperation(Exchange exchange)]
            [1] Match found: com.soa.message.Endpoint[serviceName={Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live, endpointName='https1768817363', address=https://akana-qa-115.aws.akana.roguewave.com:9903/api10173live, bindingName={Swagger_Petstore_1.0.7}Swagger_Petstore_Binding_0_4205608, interfaceName={Swagger_Petstore_1.0.7}Swagger_Petstore_PortType_0_2564132, virtualHost=akana-qa-115.aws.akana.roguewave.com]
            [1] HttpInBinding.accept(Exchange)
            [1] Start [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]
            [1] Invoking handleMessage() in regular order on: com.soa.message.audit.handler.ReportHandler
            [1] ReportHandler:handleMessage()
            [1] Invoking handleMessage() in regular order on: com.soa.policy.handler.metrics.MetricsHandler
            [1] Invoking handleMessage() in regular order on: com.soa.policy.quota.concurrency.handler.ConcurrencyCloseHandler
....            
            [1] exchange being delivered to service: {Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live, endpoint: https1768817363
            [1] Router:exchange being delivered to component [bpel.process.engine]
            [1] Start [ProcessSE.onExchange(MessageExchange)]
                [1] Start [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]
                [1] Invoking handleMessage() in regular order on: com.soa.message.handler.monitoring.pipeline.PipelineMonitoringHandler
                [1] Invoking handleMessage() in regular order on: com.soa.message.audit.handler.ReportHandler
.....                
                [1] Invoking handleMessage() in regular order on: com.soa.policy.handler.audit.ConsumerContentHandler
                [1] ConsumerContentHandler:handleMessage()
                [1] End [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]
                [1] Start [HttpClientTransport.accept()]
                [1] Setting request header [Atmo-Forward-To][https://akana-qa-115.aws.akana.roguewave.com:9903/api10173live/pet]
        ....
                            [45] com.soa.security.ssl.impl.ThreadLocalRequestContext.clear() values map size before clear [3]
                            [45] End [HttpClientTransport.accept()]
                            [45] Output message received
                            [45] Start [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]
                            [45] Invoking handleMessage() in reverse on: com.soa.message.audit.handler.OutboundReportHandler
                            [45] OutboundReportHandler:handleMessage()
                            [45] Invoking handleMessage() in reverse on: com.soa.policy.handler.audit.ConsumerContentHandler
    ...
            [61] Start [JSONIncomingDenormalizer:denormalize [65fdf4eb-3e05-44a7-8dcd-a4f3a652b54d]]
    ...
            [62] End [ProcessSE.onExchange(MessageExchange)]
        [62] End [com.soa.jbi.component.http.impl.HttpMultiEndpointBinding.accept(Exchange in)]
    [62] End [com.soa.transport.jetty.JettyTransportBinding.handle target [/pet] method [POST]]
[62] End [Handling request for [/pet]]

How Indented logging works in Akana?

When indented logging is enabled, the gateway creates a log block for each incoming API request. All log entries generated during the lifecycle of that request—TRACE, DEBUG, INFO, WARN, or ERROR are captured in this block.

Key characteristics include:

  • Each operation in the request lifecycle writes a log entry to the block.
  • Entries are written with indentation levels to represent nested operations.
  • Parent operations appear at the top level, while sub-operations are indented beneath them.
  • At the end of a request processing, all entries in the log block are concatenated and written as a single structured log message.

Logging levels

Akana uses the standard Log4j 2 logging levels, listed from lowest to highest severity:

  • TRACE: A fine‑grained debug message that captures the application flow. This is the most verbose level.
  • DEBUG: A general debugging information useful during development or troubleshooting.
  • INFO: Informational messages that highlight the progress of the application at a coarse-grained level (For example, application startup/shutdown, significant state changes).
  • WARN: An event that might possibly lead to an error or a potentially harmful situation.
  • ERROR: An error in the application, possibly recoverable, that might still allow the application to continue running.
  • FATAL: A very severe error event that will presumably lead the application to abort or terminate.
  • OFF: No events are logged.

How Logging levels affect Indented logs?

The logging level of the top‑level parent package determines what entries are captured in the log block.

Packages nested within the log block are logged only when their logging level is equal to or less than the top‑level parent package. This approach provides a clear and readable trace of the entire request execution.

Log block concept

A log block captures all trace messages generated during the processing of a single API request. It provides a structured, readable view of the request flow.

The log block mechanism works as follows:

  • When a request enters the gateway, a new log block is created.
  • Each internal class across packages, including policies, the routing engine, connectors, and transformations, appends its messages to the block. Before logging a message, each internal package checks whether the corresponding log-level is enabled for the class under the com.soa.log PID. Only enabled messages are added to the block.
  • Nested operations increase the indentation level.
  • Exceptions and errors encountered during execution are automatically added to the same block.
  • After the request completes, the gateway concatenates all entries and writes the output as one indented trace log.

Exception handling in Indented logs

Exceptions that occur during request processing are captured within the log block. By default:

  • Exception messages are included within the corresponding indentation level.
  • Exceptions are converted to strings and included as part of the log block output.
  • Stack traces are printed within the same trace context.
  • Errors are logged without breaking the structure of the trace.
The exceptions are logged as string message, the Log4j2 exception‑specific patterns do not apply.

The following is an example:

Copy
Backend Request Sent
  Exception Occurred
    java.net.ConnectException: Connection refused

This ensures that failures can be traced back to the exact stage where they occurred. This approach keeps all trace information for a request together, making it easier to identify where a failure occurred and to troubleshoot issues efficiently.

Customizing default Indented log

You can customize the default indented log to match your specific logging requirements.

Disable indented logging

Disable indented logging by setting the following property to false in the Akana Administration Console:

com.soa.framework ->
failure.data.capture.enabled = false

Enable logging for additional packages

Use the Akana Administration Console to enable granular logging for a specific package.

  1. Log in to the Admin Console.
  2. Go to Configuration > Configuration Categories > com.soa.log.
  3. To enable trace logging for a package, for example: com.soa.policy, Click Add Property and specify the following values:
      • Property Name: logger.policy.name
      • Property Value: com.soa.policy
  4. Click Add Property again to set the log level and specify following values:
      • Property Name: logger.policy.level
      • Property Value: trace
  5. Click Apply to save the changes.

Enable end-to-end trace logging for an API request

To enable trace‑level logging for end‑to‑end API request processing without turning on root‑level trace logging, enable trace logging for the following packages:

  • com.soa.jbi
  • com.soa.transport
  • com.soa.policy
  • com.akana.policy
  • com.soa.message
  • com.soa.monitor

Sample configuration

Use the following recipe to configure the logging properties:

Copy
{
  "name":"request-trace-logging",
  "description":"Trace  Logger configuration ",
  "phases":["finalize"],
  "configurations":[
    {
      "pid":"com.soa.log",
      "update":{
        "logger.customlogging.name":"com.custom.policy.package.ifany",
        "logger.customlogging.level":"trace",
        "logger.jbi.name":"com.soa.jbi",
        "logger.jbi.level":"trace",
        "logger.httptransport.name":"com.soa.transport",
        "logger.httptransport.level":"trace",
        "logger.policy.name": "com.soa.policy",
        "logger.policy.level":"trace",
        "logger.akanapolicy.name":"com.akana.policy",
        "logger.akanapolicy.level":"trace",
        "logger.message.name":"com.soa.message",
        "logger.message.level":"trace",
        "logger.monitor.name":"com.soa.monitor",
        "logger.monitor.level":"trace"
      }
    }
  ]
}

Optimize container logging

Use the following properties under com.soa.framework PID to optimize container‑level logging:

  • failure.data.capture.enabled: Captures formatted logging information. If true, logged data is indented based on the logging context. This is often referred to as Nested Diagnostic Context (NDC) logging. This demands more memory resources at runtime but adds to the readability of the resulting log information. The default value is true.
  • prepend.log.level: Prepends log level to log messages. The default value is false.
  • track: Tracks Logging Frames. Useful when searching for leaks. The default value is false.
  • txBlockThresholdTime: Writes a log to the log file for successful transactions, even when trace is disabled, if the complete transaction takes more than the provided milliseconds. The default value is 0.
  • compact.exception.logging.enabled: This field allows to limit the size of the exception stack trace logged in Akana container logs. When this value is set to true, then the exception stack trace is logged after the Indented log. The standard Log4j2 configuration can be used to limit the size of the stack trace. For example, %thowable{5} logs only the first 5 lines of the stack trace. When the value is set to false, this feature is disabled. The default value is false.

Customize the common pattern layout

To change the container log format, review the default pattern in the Admin Console under com.soa.logappender.rolling.layout.pattern.

You can update this property by using the following examples:

Mark the start and end of the log block

Fixed start and end pattern

[GW] [%d ]%p{length=5} [%t] %c{1} %m [EGW]%n

Use a value from an environment variable

[${env:CONTAINER_NAME:-GW} [%d ]%p{length=5} [%t] %c{1} %m [EGW]%n

Log the entire block on a single line

%d %p{length=5} [%t] %c{1} -  %replace{%m}{[\r\n]+}{ Ln }%n

Customize exception stack trace logging

You can customize exception stack trace logging by using the standard Log4j2 pattern layout template.

By default, stack trace logging is disabled. To enable it, set the following property to true in the Admin Console:

com.soa.framework ->
compact.exception.logging.enabled = true

After you enable this capability:

  • The full stack trace is printed outside the main log block.
  • A placeholder message prefixed with “Exception occurred:” appears inside the main log block to indicate where the exception happened.

The format of the stack trace can be configured by using following pattern.

[GW] [%d ]%p{length=5} [%t] %c{1} %m %throwable{5} [EGW]%n

In this example, %throwable{5} prints only the first five lines of the stack trace, which helps reduce container log storage space.

Copy
[GW] [2026-03-16 07:56:21,102 ]ERROR [Jetty Worker Thread [akana-qa-115.aws.akana.roguewave.com:9903]-9] JettyTransportBinding Start [com.soa.transport.jetty.JettyTransportBinding.handle target [/pet] method [POST]]
        [0] com.soa.transport.jetty.JettyTransportBinding.getListenerEndpoint(Request request)
        [1] Looking for match for RequestURL [https://akana-qa-115.aws.akana.roguewave.com:9903/api10213live/pet] IncomingRequestURI [https://10.250.25.234:9903] RegisteredListenerURI [https://0.0.0.0:9903/api10213live] by comparing with comparator [HostPortComparatorAnonymousInnerClass created in com.soa.transport.jetty.JettyTransportBinding.getHostPortComparator()]
        [1] Comparing URIs first [https://10.250.25.234:9903] second [https://0.0.0.0:9903/api10213live] with below comparators.
        [1] Comparing ports with Port Comparator [com.soa.transport.impl.ComparatorFactory$CompositeAnyComparator[com.soa.transport.impl.ComparatorFactory$$Lambda$460/0x0000000800eca338@426f00b9, com.soa.transport.impl.ComparatorFactory$SetMembershipAnyComparator[0, -1]]]
        [1] Comparing first [9903] second [9903] with comparator - 1 [com.soa.transport.impl.ComparatorFactory$$Lambda$460/0x0000000800eca338@426f00b9]
        [1] Match found first [9903] second [9903] with comparator - 1 [com.soa.transport.impl.ComparatorFactory$$Lambda$460/0x0000000800eca338@426f00b9]
        [1] Match found for ports
        [1] Comparing hosts with Host Comparator [com.soa.transport.impl.ComparatorFactory$CompositeAnyComparator[java.lang.String$CaseInsensitiveComparator@69e61c16, com.soa.transport.impl.ComparatorFactory$LocalOrWildcardOrInetAddressComparator@20ec4d00]]
        [1] Comparing first [10.250.25.234] second [0.0.0.0] with comparator - 1 [java.lang.String$CaseInsensitiveComparator@69e61c16]
        [1] Comparing first [10.250.25.234] second [0.0.0.0] with comparator - 2 [com.soa.transport.impl.ComparatorFactory$LocalOrWildcardOrInetAddressComparator@20ec4d00]
        [1] com.soa.transport.impl.ComparatorFactory$LocalOrWildcardOrInetAddressComparator host1 [/10.250.25.234] host2 [/0.0.0.0] (host1.isLoopbackAddress() [false] && host2.isLoopbackAddress() [false]) || (host1.isAnyLocalAddress() [false] || host2.isAnyLocalAddress() [true]) || (host1.equals(host2) [false])
        [1] Match found first [10.250.25.234] second [0.0.0.0] with comparator - 2 [com.soa.transport.impl.ComparatorFactory$LocalOrWildcardOrInetAddressComparator@20ec4d00]
        [1] Match found for hosts
        [1] Comparing schemes first [https] second [https] with [java.lang.String$CaseInsensitiveComparator@69e61c16]
        [1] Match found for schemes.
        [1] com.soa.transport.jetty.JettyTransportBinding:Issuing event RequestURL [https://akana-qa-115.aws.akana.roguewave.com:9903/api10213live/pet] IncomingRequestURI [https://10.250.25.234:9903] RegisteredListenerURI [https://0.0.0.0:9903/api10213live]
        [1] Start [ServiceDoSRulesExecutor:evaluate()]
        [1] End [ServiceDoSRulesExecutor:evaluate()]
        [1] Start [com.soa.jbi.component.http.impl.HttpMultiEndpointBinding.accept(Exchange in)]
                [1] Start [com.soa.jbi.component.http.operation.OperationFinder.findOperation(Exchange exchange)]
                        [1] Found operation [{Swagger_Petstore_1.0.6}addPet] quality [3]
                [1] End [com.soa.jbi.component.http.operation.OperationFinder.findOperation(Exchange exchange)]
                [1] HttpInBinding.accept(Exchange)
                [1] ReportHandler:handleMessage()
                [1] Invoked Method: com.soa.policy.quota.concurrency.handler.ConcurrencyCloseHandler.handleMessage() ServiceName: Swagger_Petstore_1.0.6 ParameterType: IN Status: ACTIVE Concurrency Count: 0
                [1] com.soa.message.handler.endpoint.OperationHandler.handleMessage(MessageContext context) port [https925736999] service [{Swagger_Petstore_1.0.6}svc_d2563513-7f96-4262-b4c6-908a75d7ca97.automation2025-1.live] operation [addPet]
                [1] Policy handler chain:handleMessage(null)
                [1] PolicyHandlerChain:handleMessage(): context.setProperty()
                [1] AuditHandler:handleMessage()
                [1] FilterHandler:handleMessage()
                [1] ContentHandler:handleMessage()
                [1] HttpProviderTransactionHandler:handleMessage()
                [1] Start [ResourceServerOAuthSecurityHandler.handleMessage()]
                        [1] Validating token with domain [OAuth]
                        [2] Authenticated token with domain [OAuth]
                        [2] Grant includes the required resource [openid] in scope.
                        [2] Grant includes the required resource [scope] in scope.
                        [2] removing OAuth token header
                        [2] populating custom headers
                        [2] end authenticating token for domain [OAuth]
                [2] End [ResourceServerOAuthSecurityHandler.handleMessage()]
                [2] Start [JOSEV2PolicyEnforceHandler.handleMesage()]
                        [2] tan [openbanking.org.uk.invalid] parameter exists in request JWS but does not match the configured domain in policy [openbanking.org.uk]
                        [3] Exception occurred: GException: tan header value is incorrect. It must match the domain name.
                [6] End [JOSEV2PolicyEnforceHandler.handleMesage()]
                [6] MessageHandler.handleMessage returned false and rest of the chain will be skipped: com.akana.policy.handler.jose.JOSEV2PolicyEnforceHandler
                [6] Start [com.akana.policy.http.validate.HttpValidatePolicyHandler.close()]
                [6] End [com.akana.policy.http.validate.HttpValidatePolicyHandler.close()]
                [6] MessageHandler.handleMessage returned false and rest of the chain will be skipped: com.soa.policy.wspolicy.handler.ext.PolicyHandlerChain
                [6] MessageHandler.handleMessage returned false and rest of the chain will be skipped: com.soa.message.handler.endpoint.EndpointHandler
                [6] com.soa.message.handler.endpoint.OperationHandler.handleMessage(MessageContext context) port [https925736999] service [{Swagger_Petstore_1.0.6}svc_d2563513-7f96-4262-b4c6-908a75d7ca97.automation2025-1.live] operation [addPet]
                [6] Fault message found but not registered in WSDL. Treating as binding fault
                [6] Policy handler chain:handleMessage(null)
                [6] PolicyHandlerChain:handleMessage(): context.setProperty()
                [6] HttpProviderTransactionHandler:handleMessage()
                [6] ContentHandler:handleMessage()
                [7] Invoked Method: com.soa.policy.quota.concurrency.handler.ConcurrencyCloseHandler.handleMessage() ServiceName: Swagger_Petstore_1.0.6 ParameterType: FAULT Status: ERROR Concurrency Count: 0
                [7] ReportHandler:handleMessage()
                [7] Exception occurred: HttpException: HTTP Error [400:Bad Request] when accessing the URI [Not specified]
        [7] End [com.soa.jbi.component.http.impl.HttpMultiEndpointBinding.accept(Exchange in)]
        [7] com.soa.transport.jetty.JettyTransportBinding reply ([400] Bad Request)
        [7] com.soa.transport.mime.StreamingContentWriter Content-Type [application/json]
        [7] commit(1.0) wrote 427 bytes
        [7] Start [com.soa.jbi.component.http.impl.HttpMultiEndpointBinding.accept(Exchange in)]
                [7] HttpInBinding.accept(Exchange)
                [7] Invoked Method: com.soa.policy.quota.concurrency.handler.ConcurrencyCloseHandler.close() ServiceName: Swagger_Petstore_1.0.6 ParameterType: FAULT Status: ERROR Concurrency Count: 0
        [8] End [com.soa.jbi.component.http.impl.HttpMultiEndpointBinding.accept(Exchange in)]
[8] End [com.soa.transport.jetty.JettyTransportBinding.handle target [/pet] method [POST]]  [EGW]
[GW] [2026-03-16 07:56:21,103 ]ERROR [Jetty Worker Thread [akana-qa-115.aws.akana.roguewave.com:9903]-9] JettyTransportBinding HTTP Error [400:Bad Request] when accessing the URI [Not specified] com.soa.transport.http.HttpException: HTTP Error [400:Bad Request] when accessing the URI [Not specified]
        at com.akana.policy.jose.error.handler.impl.UKOB31OpenBankingErrorHandlerImpl.buildErrorResponse(UKOB31OpenBankingErrorHandlerImpl.java:159)
        at com.akana.policy.jose.error.handler.impl.UKOB31OpenBankingErrorHandlerImpl.handleError(UKOB31OpenBankingErrorHandlerImpl.java:89)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) [EGW]
[GW] [2026-03-16 07:56:21,103 ]ERROR [Jetty Worker Thread [akana-qa-115.aws.akana.roguewave.com:9903]-9] JettyTransportBinding tan header value is incorrect. It must match the domain name. com.digev.fw.exception.GException: tan header value is incorrect. It must match the domain name.
        at com.akana.policy.jose.validator.UKOB31DetachedJoseValidator.validate(UKOB31DetachedJoseValidator.java:58)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) [EGW]

If Akana logs an exception at the Warning, Debug, or Info level, the exception might not appear in the stack trace as shown below.

Copy
[GW] [2026-03-16 08:03:11,323 ]ERROR [Jetty Worker Thread [akana-qa-115.aws.akana.roguewave.com:9903]-9] JettyTransportBinding Start [com.soa.transport.jetty.JettyTransportBinding.handle target [/pet] method [POST]]
        [0] com.soa.transport.jetty.JettyTransportBinding.getListenerEndpoint(Request request)
        [0] Looking for match for RequestURL [https://akana-qa-115.aws.akana.roguewave.com:9903/api10213live/pet] IncomingRequestURI [https://10.250.25.234:9903] RegisteredListenerURI [https://0.0.0.0:9903/api10213live] by comparing with comparator [HostPortComparatorAnonymousInnerClass created in com.soa.transport.jetty.JettyTransportBinding.getHostPortComparator()]
        [0] Comparing URIs first [https://10.250.25.234:9903] second [https://0.0.0.0:9903/api10213live] with below comparators.
        [0] Comparing ports with Port Comparator [com.soa.transport.impl.ComparatorFactory$CompositeAnyComparator[com.soa.transport.impl.ComparatorFactory$$Lambda$460/0x0000000800eca338@426f00b9, com.soa.transport.impl.ComparatorFactory$SetMembershipAnyComparator[0, -1]]]
        [0] Comparing first [9903] second [9903] with comparator - 1 [com.soa.transport.impl.ComparatorFactory$$Lambda$460/0x0000000800eca338@426f00b9]
        [0] Match found first [9903] second [9903] with comparator - 1 [com.soa.transport.impl.ComparatorFactory$$Lambda$460/0x0000000800eca338@426f00b9]
        [0] Match found for ports
        [0] Comparing hosts with Host Comparator [com.soa.transport.impl.ComparatorFactory$CompositeAnyComparator[java.lang.String$CaseInsensitiveComparator@69e61c16, com.soa.transport.impl.ComparatorFactory$LocalOrWildcardOrInetAddressComparator@20ec4d00]]
        [0] Comparing first [10.250.25.234] second [0.0.0.0] with comparator - 1 [java.lang.String$CaseInsensitiveComparator@69e61c16]
        [0] Comparing first [10.250.25.234] second [0.0.0.0] with comparator - 2 [com.soa.transport.impl.ComparatorFactory$LocalOrWildcardOrInetAddressComparator@20ec4d00]
        [0] com.soa.transport.impl.ComparatorFactory$LocalOrWildcardOrInetAddressComparator host1 [/10.250.25.234] host2 [/0.0.0.0] (host1.isLoopbackAddress() [false] && host2.isLoopbackAddress() [false]) || (host1.isAnyLocalAddress() [false] || host2.isAnyLocalAddress() [true]) || (host1.equals(host2) [false])
        [0] Match found first [10.250.25.234] second [0.0.0.0] with comparator - 2 [com.soa.transport.impl.ComparatorFactory$LocalOrWildcardOrInetAddressComparator@20ec4d00]
        [0] Match found for hosts
        [0] Comparing schemes first [https] second [https] with [java.lang.String$CaseInsensitiveComparator@69e61c16]
        [0] Match found for schemes.
        [0] com.soa.transport.jetty.JettyTransportBinding:Issuing event RequestURL [https://akana-qa-115.aws.akana.roguewave.com:9903/api10213live/pet] IncomingRequestURI [https://10.250.25.234:9903] RegisteredListenerURI [https://0.0.0.0:9903/api10213live]
        [1] Start [ServiceDoSRulesExecutor:evaluate()]
        [1] End [ServiceDoSRulesExecutor:evaluate()]
        [1] Start [com.soa.jbi.component.http.impl.HttpMultiEndpointBinding.accept(Exchange in)]
                [1] Start [com.soa.jbi.component.http.operation.OperationFinder.findOperation(Exchange exchange)]
                        [1] Found operation [{Swagger_Petstore_1.0.6}addPet] quality [3]
                [1] End [com.soa.jbi.component.http.operation.OperationFinder.findOperation(Exchange exchange)]
                [1] HttpInBinding.accept(Exchange)
                [1] ReportHandler:handleMessage()
                [1] Invoked Method: com.soa.policy.quota.concurrency.handler.ConcurrencyCloseHandler.handleMessage() ServiceName: Swagger_Petstore_1.0.6 ParameterType: IN Status: ACTIVE Concurrency Count: 0
                [1] com.soa.message.handler.endpoint.OperationHandler.handleMessage(MessageContext context) port [https925736999] service [{Swagger_Petstore_1.0.6}svc_d2563513-7f96-4262-b4c6-908a75d7ca97.automation2025-1.live] operation [addPet]
                [1] Policy handler chain:handleMessage(null)
                [1] PolicyHandlerChain:handleMessage(): context.setProperty()
                [1] AuditHandler:handleMessage()
                [1] FilterHandler:handleMessage()
                [1] ContentHandler:handleMessage()
                [1] HttpProviderTransactionHandler:handleMessage()
                [1] Start [ResourceServerOAuthSecurityHandler.handleMessage()]
                        [2] Validating token with domain [OAuth]
                        [2] JWT access token expired at: Mon Mar 16 07:58:43 UTC 2026
                        [3] message not found for key: 1010975 in locale: English (United States)
                        [5] message not found for key: 1010975 in locale: English (United States)
                        [6] message not found for key: 1010975 in locale: English (United States)
                [7] End [ResourceServerOAuthSecurityHandler.handleMessage()]
                [7] Start [com.akana.policy.http.validate.HttpValidatePolicyHandler.close()]
                [7] End [com.akana.policy.http.validate.HttpValidatePolicyHandler.close()]
                [7] Exception occurred: MessageFaultException: 1012117 - Invalid token. The token has expired.
                [7] com.soa.message.handler.endpoint.OperationHandler.handleMessage(MessageContext context) port [https925736999] service [{Swagger_Petstore_1.0.6}svc_d2563513-7f96-4262-b4c6-908a75d7ca97.automation2025-1.live] operation [addPet]
                [7] Policy handler chain:handleMessage(null)
                [7] PolicyHandlerChain:handleMessage(): context.setProperty()
                [7] HttpProviderTransactionHandler:handleMessage()
                [7] ContentHandler:handleMessage()
                [7] Invoked Method: com.soa.policy.quota.concurrency.handler.ConcurrencyCloseHandler.handleMessage() ServiceName: Swagger_Petstore_1.0.6 ParameterType: FAULT Status: ERROR Concurrency Count: 0
                [7] ReportHandler:handleMessage()
                [7] Exception occurred: GException: Authentication challenge issued
        [7] End [com.soa.jbi.component.http.impl.HttpMultiEndpointBinding.accept(Exchange in)]
        [8] com.soa.transport.jetty.JettyTransportBinding reply ([401] Unauthorized)
        [8] com.soa.transport.mime.StreamingContentWriter Content-Type [application/json]
        [8] commit(1.0) wrote 87 bytes
        [8] Start [com.soa.jbi.component.http.impl.HttpMultiEndpointBinding.accept(Exchange in)]
                [9] HttpInBinding.accept(Exchange)
                [9] Invoked Method: com.soa.policy.quota.concurrency.handler.ConcurrencyCloseHandler.close() ServiceName: Swagger_Petstore_1.0.6 ParameterType: FAULT Status: ERROR Concurrency Count: 0
                [10] message not found for key: 1010975 in locale: English (United States)
        [10] End [com.soa.jbi.component.http.impl.HttpMultiEndpointBinding.accept(Exchange in)]
[10] End [com.soa.transport.jetty.JettyTransportBinding.handle target [/pet] method [POST]]  [EGW]

The other stack trace pattern options are:

Pattern Description
ex|exception|throwable { <condition>}
  • %throwable{short} outputs the first line of the Throwable.
  • %throwable{short.className} outputs the name of the class where the exception occurred.
  • %throwable{short.methodName} outputs the method name where the exception occurred.
  • %throwable{short.fileName} outputs the file name where the exception occurred.
  • %throwable{short.lineNumber} outputs the line number where the exception occurred.
  • %throwable{short.message} outputs the message.
  • %throwable{short.localizedMessage} outputs the localized message.
  • %throwable{n} outputs the first n lines of the stack trace.

rEx["none"|"short"|"full"|depth],[filters(packages)} rException["none"|"short"|"full"|depth],[filters(packages)}

rThrowable["none"|"short"|"full"|depth],[filters(packages)}

These patterns work the same way as the %throwable conversion word but prints the stack trace starting with the first thrown exception, followed by each wrapping exception.

  • %rEx{short} - output only the first line of the Throwable.
  • %rEx{n} - outputs the first n lines of the stack trace.
  • rException{[filters(packages)} - suppresses stack trace lines from the specified package list. The conversion word supports the optional filters(packages) parameter, where packages is a list of package names to exclude from the output.
  • %rEx{none} or %rEx{0} - suppresses printing of the exception.

xEx{"none"|"short"|"full"|depth],[filters(packages)} xException["none"|"short"|"full"|depth],[filters(packages)}

xThrowable["none"|"short"|"full"|depth],[filters(packages)}

These patterns work the same way as the %throwable conversion word but also include class packaging information.

For each stack trace element, the formatter adds a string containing the jar file or directory where the class is located, and the Implementation‑Version found in that jar’s manifest. If the packaging information cannot be confirmed, the formatter prefixes the entry with a tilde (~).

  • %xEx{short} - outputs only the first line of the Throwable.
  • %xEx{n} - outputs the first n lines of the stack trace.
  • xEx{[filters(packages)} - The conversion word can also be followed by "filters(packages)" where packages is a list of package names that must be suppressed from the stack traces.
  • %xEx{none} or %xEx{0} - suppresses the printing of the exception.

Enable console log appender

A Console Appender allows container logs to be written to the application console (stdout). This is useful for debugging and for containerized deployments (such as Kubernetes), where log collectors read logs directly from container output.

Take the following steps to configure a Console Appender by updating the com.soa.log configuration properties.

  1. In the Admin Console, go to the com.soa.log configuration property.
  2. Click Add property to add the following properties:
    Copy
    appender.console.type = Console
    appender.console.name = ConsoleAppender
    appender.console.target = SYSTEM_OUT
    appender.console.layout.type = PatternLayout
    appender.console.layout.pattern = <SAME pattern as Rolling file appender>
  3. Add the logger configuration to route trace logs output to the console:
    rootLogger.appenderRef.console.ref = ConsoleAppender
  4. Click Apply Changes.

Using the Indented Logger in a Custom Policy

You can include logs from a custom policy as part of the overall API request’s log block. Alternatively, you can generate a separate, standalone log block only for the custom policy.

The following is an example showing how to configure and use the indented logger within a custom policy handler.

Copy
...
import com.digev.fw.log.Log; // Import log related package.
public class CustomPolicyHandler implements MessageHandler {
    ......
    ...
    // Define the log variable
    private static final Log log = Log.getLog(InjectHeadersPolicyHandler.class);
    ....
    .....
public boolean handleMessage(MessageContext messageContex) throws GException, MessageFaultException {
        long startTime = System.currentTimeMillis();
        try{
                // use this if you want custom policy logs to be part of overall APi Request indented logs
                  log.startTraceBlock(LOGHEAD+"Custom Policy Handler.handleRequestMessage()");
                // Use this option if you want to track logging level at custom policy level itself
                // log.startDetatchedTraceBlock(LOGHEAD+"Custom Policy Handler.handleRequestMessage()");
            // for each log.trace or log.debug or log.info and so on check whether trace is enabled or not
            boolean isTraceEnabled = log.isTraceEnabled(); // Once in a method
            boolean isInfoInabled = log.isInfoEnabled();
            if(isTraceEnabled) 
                log.trace(LOGHEAD + "[TRACE]"Trace message from policy");
            if(isInfoInabled) 
                log.info(LOGHEAD + "[INFO]"Info message from policy");
        } finally{
        log.endTraceBlock();
        }
}

JSON-format trace logs

The JSON-format trace logs provide structured data and can be enabled or disabled by using the recipe.

Configure the Log4j trace log based on the JSON-format

Use the following recipe to configure the Log4j trace log to generate logs in JSON format. Run the recipe by using the following structure:

./jython.sh -m akana.container --recipe ../recipes/json-template-logger-config.json --name <container-name> --home <application-runtime-path>

Disable the Log4j JSON-format trace log appender

Use this recipe to disable the Log4j JSON‑format trace log appender. Run the recipe by using the following structure:

./jython.sh -m akana.container --recipe ../recipes/disable-log-appender-configurator.json --name <container-name> --home <application-runtime-path>

No property files are required for this recipe. This recipe disables only the jsonRolling log appender. Do not run it in default mode if you intend to keep other appenders enabled.

Enable the JSON rolling log appender for JSON log

To enable the JSON rolling log appender for JSON logging, run the recipe by using the following structure:

./jython.sh -m akana.container --recipe ../recipes/enable-log-appender-configurator.json --name <container-name> --home <application-runtime-path>

No property files are required for this recipe. This recipe enables only the jsonRolling log appender. Do not run it in default mode if you intend to enable the Log4j rolling trace log appender instead.

OOTB (Out‑of‑the‑Box) JSON log format

Akana supports an ECS‑based JSON template for trace logs. You can customize to match the requirements of your monitoring tool.

The following is an ECS‑based JSON template layout for trace logs (trace-ecs-layout-template.json).

Copy
{
  "@timestamp": {
    "$resolver": "timestamp",
    "pattern": {
      "format": "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
      "timeZone": "UTC"
    }
  },
  "ecs.version": "1.2.0",
  "event": {
    "type": "trace"
  },
  "container": {
    "name": "$${sys:container.name:-unknown}"
  },
  "log.level": {
    "$resolver": "level",
    "field": "name"
  },
  "message": {
    "$resolver": "message",
    "stringified": true
  },
  "process.thread.name": {
    "$resolver": "thread",
    "field": "name"
  },
  "log.logger": {
    "$resolver": "logger",
    "field": "name"
  },
  "error.type": {
    "$resolver": "exception",
    "field": "className"
  },
  "error.message": {
    "$resolver": "exception",
    "field": "message"
  },
  "error.stack_trace_limited": {
    "$resolver": "pattern",
    "pattern": "%throwable{5}"
  }
}
To use the container name in an Amazon EKS environment, replace "name": "$${sys:container.name:-unknown}" property with "name": "${CONTAINER_NAME}" in the Log4j JSON layout configuration. For more information, refer to the JSON Template Layout section in the Apache Log4j documentation.

A JSON‑based trace log generated through Log4j appears in the following format:

Copy
{
    "@timestamp": "2026-03-13T12:50:58.197Z",
    "ecs.version": "1.2.0",
    "event": {
        "type": "trace"
    },
    "container": {
        "name": "nd3"
    },
    "log.level": "DEBUG",
    "message": "Start [Handling request for [/pet]]\n\t[0] Start [com.soa.transport.jetty.JettyTransportBinding.handle target [/pet] method [POST]]\n\t\t[0] com.soa.transport.jetty.JettyTransportBinding.getListenerEndpoint(Request request)\n\t\t[0] Looking for match for RequestURL [https://akana-qa-115.aws.akana.roguewave.com:9903/api10173live/pet] IncomingRequestURI [https://10.250.25.234:9903] RegisteredListenerURI [https://0.0.0.0:9903/api10173live] by comparing with comparator [HostPortComparatorAnonymousInnerClass created in com.soa.transport.jetty.JettyTransportBinding.getHostPortComparator()]\n\t\t[0] Comparing URIs first [https://10.250.25.234:9903] second [https://0.0.0.0:9903/api10173live] with below comparators.\n\t\t[0] Comparing ports with Port Comparator [com.soa.transport.impl.ComparatorFactory$CompositeAnyComparator[com.soa.transport.impl.ComparatorFactory$$Lambda$565/0x0000000800ed32d8@3fbbe6d7, com.soa.transport.impl.ComparatorFactory$SetMembershipAnyComparator[0, -1]]]\n\t\t[0] Comparing first [9903] second [9903] with comparator - 1 [com.soa.transport.impl.ComparatorFactory$$Lambda$565/0x0000000800ed32d8@3fbbe6d7]\n\t\t[0] Match found first [9903] second [9903] with comparator - 1 [com.soa.transport.impl.ComparatorFactory$$Lambda$565/0x0000000800ed32d8@3fbbe6d7]\n\t\t[0] Match found for ports\n\t\t[0] Comparing hosts with Host Comparator [com.soa.transport.impl.ComparatorFactory$CompositeAnyComparator[java.lang.String$CaseInsensitiveComparator@4d886a28, com.soa.transport.impl.ComparatorFactory$LocalOrWildcardOrInetAddressComparator@4e95afa4]]\n\t\t[0] Comparing first [10.250.25.234] second [0.0.0.0] with comparator - 1 [java.lang.String$CaseInsensitiveComparator@4d886a28]\n\t\t[0] Comparing first [10.250.25.234] second [0.0.0.0] with comparator - 2 [com.soa.transport.impl.ComparatorFactory$LocalOrWildcardOrInetAddressComparator@4e95afa4]\n\t\t[0] com.soa.transport.impl.ComparatorFactory$LocalOrWildcardOrInetAddressComparator host1 [/10.250.25.234] host2 [/0.0.0.0] (host1.isLoopbackAddress() [false] && host2.isLoopbackAddress() [false]) || (host1.isAnyLocalAddress() [false] || host2.isAnyLocalAddress() [true]) || (host1.equals(host2) [false])\n\t\t[0] Match found first [10.250.25.234] second [0.0.0.0] with comparator - 2 [com.soa.transport.impl.ComparatorFactory$LocalOrWildcardOrInetAddressComparator@4e95afa4]\n\t\t[0] Match found for hosts\n\t\t[0] Comparing schemes first [https] second [https] with [java.lang.String$CaseInsensitiveComparator@4d886a28]\n\t\t[0] Match found for schemes.\n\t\t[0] com.soa.transport.jetty.JettyTransportBinding:Issuing event RequestURL [https://akana-qa-115.aws.akana.roguewave.com:9903/api10173live/pet] IncomingRequestURI [https://10.250.25.234:9903] RegisteredListenerURI [https://0.0.0.0:9903/api10173live]\n\t\t[0] Request header [Atmo-Forward-To][https://akana-qa-115.aws.akana.roguewave.com:9903/api10173live/pet]\n\t\t[0] Request header [sec-ch-ua-platform][\"Windows\"]\n\t\t[0] Request header [User-Agent][Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36]\n\t\t[0] Request header [Accept][application/json]\n\t\t[0] Request header [sec-ch-ua][\"Not:A-Brand\";v=\"99\", \"Google Chrome\";v=\"145\", \"Chromium\";v=\"145\"]\n\t\t[0] Request header [sec-ch-ua-mobile][?0]\n\t\t[0] Request header [Origin][https://automation2025-1-oracle-rhel9-2.aws.akana.roguewave.com:7900]\n\t\t[0] Request header [Sec-Fetch-Site][same-origin]\n\t\t[0] Request header [Sec-Fetch-Mode][cors]\n\t\t[0] Request header [Sec-Fetch-Dest][empty]\n\t\t[0] Request header [Referer][https://automation2025-1-oracle-rhel9-2.aws.akana.roguewave.com:7900/atmosphere/]\n\t\t[0] Request header [Accept-Encoding][gzip, deflate, br, zstd]\n\t\t[0] Request header [Accept-Language][en-US,en;q=0.9]\n\t\t[0] Request header [Cookie][AtmoAuthToken_automation2025-1=TokenID%3Ded2d01e2-a71d-4d45-9d4a-84fa6fd57b01%2Cclaimed_id%3Durn%3Aatmosphere%3Auser%3Aautomation2025-1%3A7505008c-9aa1-4e13-a74e-8a124c948173%2CissueTime%3D1773406107630%2CexpirationTime%3D1773407967624%2CUserName%3Dadminautomation2025-1%2CUserFDN%3D7505008c-9aa1-4e13-a74e-8a124c948173%252Eautomation2025-1%2CAttributesIncluded%3Dfalse%2Csig%3DRoU3Vzr5Jlo6wq6kAtigsQiG73NFZngSGe2TQJA0pJvdqwtgp6Ffo3DDJxvELSbJqUgcX7H18N3wEp5o4xQN6GTgwTY1JosPI7iwSfR07ZoH7gHxMBWXRMgvGmlYTxFs3if4O0HXrGQiu1dT9AwHq_YlO1C5IWDjRhyjfIreLNh0KTLM1312QANU5ZN5AljxHuscNRtuA7nvaXdLJuhQqX_QkvRJayakGT9jpfMfzoXN94CZY7KIBpH8rSxgUxpIy6isyBOP4ehCC4OQREaOeygvMO0sm5wYYbWu1-uOXRky-CDlthfGlF0RvzeAsVHrTuMMe1IdKrmIffbSTP9RXw]\n\t\t[0] Request header [Atmo-Forwarded-From][https://automation2025-1-oracle-rhel9-2.aws.akana.roguewave.com:7900/forwardproxy/1773406258109]\n\t\t[0] Request header [Transfer-Encoding][chunked]\n\t\t[0] Request header [Content-Type][application/json]\n\t\t[0] Request header [Host][akana-qa-115.aws.akana.roguewave.com:9903]\n\t\t[0] Request header [Connection][keep-alive]\n\t\t[0] Local URL [https://10.250.25.234:9903/api10173live/pet]\n\t\t[0] Peer URL [https://10.250.25.234:47600/api10173live/pet]\n\t\t[0] Reading request attribute [http.req.att.listener.uri] = [https://0.0.0.0:9903/api10173live]\n\t\t[0] Reading request attribute [javax.servlet.request.key_size] = [256]\n\t\t[0] Reading request attribute [org.eclipse.jetty.servlet.request.ssl_session] = [Session(1773406065277|TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384)]\n\t\t[0] Reading request attribute [javax.servlet.request.cipher_suite] = [TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384]\n\t\t[0] Reading request attribute [javax.servlet.request.ssl_session_id] = [333a0c23EeF8F6A405B354A1E6B6D3F943E882E26eC6D055923cD48f5dCa27E8]\n\t\t[0] Evaluating Rule [com.soa.transport.impl.CompositeTransportRule@2487f954]\n\t\t[0] Evaluating Rule [com.soa.mp.dos.ServiceDoSRulesExecutor@49165aee]\n\t\t[0] Start [ServiceDoSRulesExecutor:evaluate()]\n\t\t\t[0] returning address range: 0.0.0.0, 255.255.255.255\n\t\t\t[0] clientIP: 10.250.25.234\n\t\t\t[0] returning address range: 0.0.0.0, 255.255.255.255\n\t\t\t[0] returning address range: 0.0.0.0, 255.255.255.255\n\t\t[0] End [ServiceDoSRulesExecutor:evaluate()]\n\t\t[0] Rule [com.soa.mp.dos.ServiceDoSRulesExecutor@49165aee] evaluated to [true]\n\t\t[1] Evaluating Rule [com.soa.mp.dos.MessageSizeRule@784c34f]\n\t\t[1] returning address range: 0.0.0.0, 255.255.255.255\n\t\t[1] Rule [com.soa.mp.dos.MessageSizeRule@784c34f] evaluated to [true]\n\t\t[1] Rule [com.soa.transport.impl.CompositeTransportRule@2487f954] evaluated to [true]\n\t\t[1] Start [com.soa.jbi.component.http.impl.HttpMultiEndpointBinding.accept(Exchange in)]\n\t\t\t[1] Initial selection list of endpoints[-989845668]: [com.soa.message.Endpoint[serviceName={Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live, endpointName='https1768817363', address=https://akana-qa-115.aws.akana.roguewave.com:9903/api10173live, bindingName={Swagger_Petstore_1.0.7}Swagger_Petstore_Binding_0_4205608, interfaceName={Swagger_Petstore_1.0.7}Swagger_Petstore_PortType_0_2564132, virtualHost=akana-qa-115.aws.akana.roguewave.com]]\n\t\t\t[1] Finding endpoint using selector: [com.soa.message.VirtualHostEndpointSelector@34bee710, com.soa.jbi.component.http.impl.HttpOperationEndpointSelector@2fe8f58a, com.soa.jbi.component.http.impl.HttpOptionsEndpointSelector@54521bb3]\n\t\t\t[1] com.soa.message.VirtualHostEndpointSelector.select(List<Endpoint> endpoints, Exchange exchange)\n\t\t\t[1] There is only one endpoint and hence skipping virtualhost check and returing that endpoint.\n\t\t\t[1] Start [com.soa.jbi.component.http.operation.OperationFinder.findOperation(Exchange exchange)]\n\t\t\t\t[1] Incoming request URL: POST https://akana-qa-115.aws.akana.roguewave.com:9903/api10173live/pet\n\t\t\t\t[1] Trying to find operation match on service [{Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live] in endpoint: com.soa.message.Endpoint[serviceName={Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live, endpointName='https1768817363', address=https://akana-qa-115.aws.akana.roguewave.com:9903/api10173live, bindingName={Swagger_Petstore_1.0.7}Swagger_Petstore_Binding_0_4205608, interfaceName={Swagger_Petstore_1.0.7}Swagger_Petstore_PortType_0_2564132, virtualHost=akana-qa-115.aws.akana.roguewave.com]\n\t\t\t\t[1] com.soa.jbi.component.http.operation.OperationFinder.filterByPath(List<OperationInfo> operations, ExchangeInspector inspector)\n\t\t\t\t[1] Locations for operation [getOrderById]: \n\t\t\t\t[1]   Location: [/store/order/{orderId}]\n\t\t\t\t[1] Removing [{Swagger_Petstore_1.0.7}getOrderById] from consideration, no match on  [store/order/{orderId}]\n\t\t\t\t[1] Locations for operation [loginUser]: \n\t\t\t\t[1]   Location: [/user/login]\n\t\t\t\t[1] Removing [{Swagger_Petstore_1.0.7}loginUser] from consideration, no match on  [user/login]\n\t\t\t\t[1] Locations for operation [logoutUser]: \n\t\t\t\t[1]   Location: [/user/logout]\n\t\t\t\t[1] Removing [{Swagger_Petstore_1.0.7}logoutUser] from consideration, no match on  [user/logout]\n\t\t\t\t[1] Locations for operation [placeOrder]: \n\t\t\t\t[1]   Location: [/store/order]\n\t\t\t\t[1] Removing [{Swagger_Petstore_1.0.7}placeOrder] from consideration, no match on  [store/order]\n\t\t\t\t[1] Locations for operation [deleteOrder]: \n\t\t\t\t[1]   Location: [/store/order/{orderId}]\n\t\t\t\t[1] Removing [{Swagger_Petstore_1.0.7}deleteOrder] from consideration, no match on  [store/order/{orderId}]\n\t\t\t\t[1] Locations for operation [getPetById]: \n\t\t\t\t[1]   Location: [/pet/{petId}]\n\t\t\t\t[1] Removing [{Swagger_Petstore_1.0.7}getPetById] from consideration, no match on  [pet/{petId}]\n\t\t\t\t[1] Adding [{Swagger_Petstore_1.0.7}updatePet] for consideration based on path.\n\t\t\t\t[1] Locations for operation [updatePetWithForm]: \n\t\t\t\t[1]   Location: [/pet/{petId}]\n\t\t\t\t[1] Removing [{Swagger_Petstore_1.0.7}updatePetWithForm] from consideration, no match on  [pet/{petId}]\n\t\t\t\t[1] Adding [{Swagger_Petstore_1.0.7}addPet] for consideration based on path.\n\t\t\t\t[1] Locations for operation [findPetsByTags]: \n\t\t\t\t[1]   Location: [/pet/findByTags]\n\t\t\t\t[1] Removing [{Swagger_Petstore_1.0.7}findPetsByTags] from consideration, no match on  [pet/findByTags]\n\t\t\t\t[1] Locations for operation [deletePet]: \n\t\t\t\t[1]   Location: [/pet/{petId}]\n\t\t\t\t[1] Removing [{Swagger_Petstore_1.0.7}deletePet] from consideration, no match on  [pet/{petId}]\n\t\t\t\t[1] Locations for operation [deleteUser]: \n\t\t\t\t[1]   Location: [/user/{username}]\n\t\t\t\t[1] Removing [{Swagger_Petstore_1.0.7}deleteUser] from consideration, no match on  [user/{username}]\n\t\t\t\t[1] Locations for operation [createUser]: \n\t\t\t\t[1]   Location: [/user]\n\t\t\t\t[1] Removing [{Swagger_Petstore_1.0.7}createUser] from consideration, no match on  [user]\n\t\t\t\t[1] Locations for operation [getInventory]: \n\t\t\t\t[1]   Location: [/store/inventory]\n\t\t\t\t[1] Removing [{Swagger_Petstore_1.0.7}getInventory] from consideration, no match on  [store/inventory]\n\t\t\t\t[1] Locations for operation [getUserByName]: \n\t\t\t\t[1]   Location: [/user/{username}]\n\t\t\t\t[1] Removing [{Swagger_Petstore_1.0.7}getUserByName] from consideration, no match on  [user/{username}]\n\t\t\t\t[1] Locations for operation [findPetsByStatus]: \n\t\t\t\t[1]   Location: [/pet/findByStatus]\n\t\t\t\t[1] Removing [{Swagger_Petstore_1.0.7}findPetsByStatus] from consideration, no match on  [pet/findByStatus]\n\t\t\t\t[1] Locations for operation [uploadFile]: \n\t\t\t\t[1]   Location: [/pet/{petId}/uploadImage]\n\t\t\t\t[1] Removing [{Swagger_Petstore_1.0.7}uploadFile] from consideration, no match on  [pet/{petId}/uploadImage]\n\t\t\t\t[1] Locations for operation [createUsersWithArrayInput]: \n\t\t\t\t[1]   Location: [/user/createWithArray]\n\t\t\t\t[1] Removing [{Swagger_Petstore_1.0.7}createUsersWithArrayInput] from consideration, no match on  [user/createWithArray]\n\t\t\t\t[1] Locations for operation [createUsersWithListInput]: \n\t\t\t\t[1]   Location: [/user/createWithList]\n\t\t\t\t[1] Removing [{Swagger_Petstore_1.0.7}createUsersWithListInput] from consideration, no match on  [user/createWithList]\n\t\t\t\t[1] Locations for operation [updateUser]: \n\t\t\t\t[1]   Location: [/user/{username}]\n\t\t\t\t[1] Removing [{Swagger_Petstore_1.0.7}updateUser] from consideration, no match on  [user/{username}]\n\t\t\t\t[1] com.soa.jbi.component.http.operation.OperationFinder.filterByMethod(List<OperationInfoMatch> operations, ExchangeInspector inspector)\n\t\t\t\t[1] Removing [{Swagger_Petstore_1.0.7}updatePet] from consideration method [PUT] required [POST]\n\t\t\t\t[1] Adding [{Swagger_Petstore_1.0.7}addPet] for consideration method [POST] required [POST]\n\t\t\t\t[1] com.soa.jbi.component.http.operation.OperationFinder.filterByConsumes(List<OperationInfoMatch> operations, ExchangeInspector inspector)\n\t\t\t\t[1] Adding [{Swagger_Petstore_1.0.7}addPet] for consideration, it consumes the content type [application/json]\n\t\t\t\t[1] com.soa.jbi.component.http.operation.OperationFinder.filterByProduces(List<OperationInfoMatch> operations, ExchangeInspector inspector)\n\t\t\t\t[1] Adding [{Swagger_Petstore_1.0.7}addPet] for consideration as it matches acceptableMediaTypes[[application/json]] and does not deny deniableMediaTypes[[]]\n\t\t\t\t[1] Found operation [{Swagger_Petstore_1.0.7}addPet] quality [3]\n\t\t\t[1] End [com.soa.jbi.component.http.operation.OperationFinder.findOperation(Exchange exchange)]\n\t\t\t[1] Match found: com.soa.message.Endpoint[serviceName={Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live, endpointName='https1768817363', address=https://akana-qa-115.aws.akana.roguewave.com:9903/api10173live, bindingName={Swagger_Petstore_1.0.7}Swagger_Petstore_Binding_0_4205608, interfaceName={Swagger_Petstore_1.0.7}Swagger_Petstore_PortType_0_2564132, virtualHost=akana-qa-115.aws.akana.roguewave.com]\n\t\t\t[1] HttpInBinding.accept(Exchange)\n\t\t\t[1] Start [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]\n\t\t\t[1] Invoking handleMessage() in regular order on: com.soa.message.audit.handler.ReportHandler\n\t\t\t[1] ReportHandler:handleMessage()\n\t\t\t[1] Invoking handleMessage() in regular order on: com.soa.policy.handler.metrics.MetricsHandler\n\t\t\t[1] Invoking handleMessage() in regular order on: com.soa.policy.quota.concurrency.handler.ConcurrencyCloseHandler\n\t\t\t[1] Invoked Method: com.soa.policy.quota.concurrency.handler.ConcurrencyCloseHandler.handleMessage() ServiceName: Swagger_Petstore_1.0.7 ParameterType: IN Status: ACTIVE Concurrency Count: 0\n\t\t\t[1] Invoking handleMessage() in regular order on: com.soa.policy.handler.audit.AuditLogMessageHandler\n\t\t\t[1] Invoking handleMessage() in regular order on: com.soa.message.handler.endpoint.EndpointHandler\n\t\t\t[1] Start [com.soa.message.handler.endpoint.EndpointHandler.handleMessage()]\n\t\t\t[1] Looking for OperationHandler for key [PortName [https1768817363] ServiceName [{Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live]] in all deployed handlers of size [7]\n\t\t\t[1] Found OperationHandler [com.soa.message.handler.endpoint.OperationHandler@36a8db07] for key [PortName [https1768817363] ServiceName [{Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live]]\n\t\t\t[1] com.soa.message.handler.endpoint.OperationHandler.handleMessage(MessageContext context) port [https1768817363] service [{Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live] operation [addPet]\n\t\t\t[1] Start [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]\n\t\t\t[1] End [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]\n\t\t\t[1] End [com.soa.message.handler.endpoint.EndpointHandler.handleMessage()]\n\t\t\t[1] End [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]\n\t\t\t[1] IncomingExchangeInitializer:initializing exchange [41af9f6b-c55e-44fb-9606-6818c5f07bdd][https1768817363]\n\t\t\t[1] Setting exchange endpoint [{Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live[https1768817363]]\n\t\t\t[1] Locations for operation [addPet]: \n\t\t\t[1]   Location: [/pet]\n\t\t\t[1] JSONIncomingNormalizer:normalize [41af9f6b-c55e-44fb-9606-6818c5f07bdd]\n\t\t\t[1] MultiPartNormalizer:normalizing [41af9f6b-c55e-44fb-9606-6818c5f07bdd]\n\t\t\t[1] Using preset endpoint [https1768817363][{Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live]\n\t\t\t[1] SimpleRouter:send [{Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live]\n\t\t\t[1] exchange being delivered to service: {Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live, endpoint: https1768817363\n\t\t\t[1] Router:exchange being delivered to component [bpel.process.engine]\n\t\t\t[1] Start [ProcessSE.onExchange(MessageExchange)]\n\t\t\t\t[1] Start [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]\n\t\t\t\t[1] Invoking handleMessage() in regular order on: com.soa.message.handler.monitoring.pipeline.PipelineMonitoringHandler\n\t\t\t\t[1] Invoking handleMessage() in regular order on: com.soa.message.audit.handler.ReportHandler\n\t\t\t\t[1] ReportHandler:handleMessage()\n\t\t\t\t[1] Invoking handleMessage() in regular order on: com.soa.policy.handler.metrics.MetricsHandler\n\t\t\t\t[1] Invoking handleMessage() in regular order on: com.soa.message.handler.endpoint.ServiceHandler\n\t\t\t\t[1] ServiceHandler:handleMessage()\n\t\t\t\t[1] com.soa.message.handler.endpoint.OperationHandler.handleMessage(MessageContext context) port [] service [{Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live] operation [addPet]\n\t\t\t\t[1] Start [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]\n\t\t\t\t[1] End [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]\n\t\t\t\t[1] Invoking handleMessage() in regular order on: com.soa.analytics.metrics.handler.MetricHandler\n\t\t\t\t[1] Invoking handleMessage() in regular order on: com.soa.policy.handler.audit.AuditLogMessageHandler\n\t\t\t\t[1] Invoking handleMessage() in regular order on: com.soa.policy.handler.audit.ConsumerContentHandler\n\t\t\t\t[1] ConsumerContentHandler:handleMessage()\n\t\t\t\t[1] Invoking handleMessage() in regular order on: com.soa.message.handler.contract.ContractHandler\n\t\t\t\t[1] ContractHandler:handleMessage()\n\t\t\t\t[1] ContractHandler: authorize()\n\t\t\t\t[1] Invoking handleMessage() in regular order on: com.soa.message.handler.contract.ServiceContractHandler\n\t\t\t\t[1] ServiceContractHandler:handleMessage()\n\t\t\t\t[1] Invoking handleMessage() in regular order on: com.soa.policy.quota.timeout.handler.TimeoutHandler\n\t\t\t\t[1] Invoking handleMessage() in regular order on: com.soa.message.handler.apicontract.APIContractHandler\n\t\t\t\t[1] Invoking handleMessage() in regular order on: com.soa.policy.script.handler.ScriptedPolicyHandler\n\t\t\t\t[1] Start [ScriptedPolicyHandler.perform()]\n\t\t\t\t[1] End [ScriptedPolicyHandler.perform()]\n\t\t\t\t[1] End [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]\n\t\t\t\t[1] Found 2 endpoints for [{Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live.target]\n\t\t\t\t[1]     HTTPS1383360332\n\t\t\t\t[1]     HTTP-476957430\n\t\t\t\t[1] SimpleRouter:send [{Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live.target]\n\t\t\t\t[1] exchange being delivered to service: {Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live.target, endpoint: HTTPS1383360332\n\t\t\t\t[1] Router:exchange being delivered to component [com.soa.http.out.component]\n\t\t\t\t[1] Start [HttpOutBC.handle()]\n\t\t\t\t\t[1] Start [HttpOutBinding.accept()]\n\t\t\t\t\t\t[1] HttpOutBinding.acceptInternal()\n\t\t\t\t\t\t[1] OutgoingExchangeInitializer: initializing exchange [0fda30a7-44be-418e-811b-52fc8b037fbb]\n\t\t\t\t\t\t[1] Start [JSONOutgoingDenormalizer:denormalize [0fda30a7-44be-418e-811b-52fc8b037fbb]]\n\t\t\t\t\t\t[1] End [JSONOutgoingDenormalizer:denormalize [0fda30a7-44be-418e-811b-52fc8b037fbb]]\n\t\t\t\t\t\t[1] OutgoingURLDenormalizer:determining outgoing URL\n\t\t\t\t\t\t[1] Locations for operation [addPet]: \n\t\t\t\t\t\t[1]   Location: [/pet]\n\t\t\t\t\t\t[2] OutgoingURLDenormalizer:setting outgoing URL [HTTPS://petstore.swagger.io/v2/pet]\n\t\t\t\t\t\t[2] Start [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]\n\t\t\t\t\t\t[2] Invoking handleMessage() in regular order on: com.soa.message.audit.handler.OutboundReportHandler\n\t\t\t\t\t\t[2] OutboundReportHandler:handleMessage()\n\t\t\t\t\t\t[2] Invoking handleMessage() in regular order on: com.soa.message.handler.endpoint.EndpointHandler\n\t\t\t\t\t\t[2] Start [com.soa.message.handler.endpoint.EndpointHandler.handleMessage()]\n\t\t\t\t\t\t[2] Looking for OperationHandler for key [PortName [HTTPS1383360332] ServiceName [{Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live.target]] in all deployed handlers of size [11]\n\t\t\t\t\t\t[2] Found OperationHandler [com.soa.message.handler.endpoint.OperationHandler@4ed3d1cb] for key [PortName [HTTPS1383360332] ServiceName [{Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live.target]]\n\t\t\t\t\t\t[2] com.soa.message.handler.endpoint.OperationHandler.handleMessage(MessageContext context) port [HTTPS1383360332] service [{Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live.target] operation [addPet]\n\t\t\t\t\t\t[2] Start [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]\n\t\t\t\t\t\t[2] End [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]\n\t\t\t\t\t\t[2] End [com.soa.message.handler.endpoint.EndpointHandler.handleMessage()]\n\t\t\t\t\t\t[2] Invoking handleMessage() in regular order on: com.soa.policy.handler.audit.ExchangePostProcessorHandler\n\t\t\t\t\t\t[2] Invoking handleMessage() in regular order on: com.soa.policy.handler.audit.OutboundAuditHandler\n\t\t\t\t\t\t[2] Invoking handleMessage() in regular order on: com.soa.policy.handler.audit.ConsumerContentHandler\n\t\t\t\t\t\t[2] ConsumerContentHandler:handleMessage()\n\t\t\t\t\t\t[2] End [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]\n\t\t\t\t\t\t[2] Start [HttpClientTransport.accept()]\n\t\t\t\t\t\t\t[2] Setting request header [Atmo-Forward-To][https://akana-qa-115.aws.akana.roguewave.com:9903/api10173live/pet]\n\t\t\t\t\t\t\t[2] Setting request header [sec-ch-ua-platform][\"Windows\"]\n\t\t\t\t\t\t\t[2] Setting request header [User-Agent][Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36]\n\t\t\t\t\t\t\t[2] Setting request header [Accept][application/json]\n\t\t\t\t\t\t\t[2] Setting request header [sec-ch-ua][\"Not:A-Brand\";v=\"99\", \"Google Chrome\";v=\"145\", \"Chromium\";v=\"145\"]\n\t\t\t\t\t\t\t[2] Setting request header [sec-ch-ua-mobile][?0]\n\t\t\t\t\t\t\t[2] Setting request header [Origin][https://automation2025-1-oracle-rhel9-2.aws.akana.roguewave.com:7900]\n\t\t\t\t\t\t\t[2] Setting request header [Sec-Fetch-Site][same-origin]\n\t\t\t\t\t\t\t[2] Setting request header [Sec-Fetch-Mode][cors]\n\t\t\t\t\t\t\t[2] Setting request header [Sec-Fetch-Dest][empty]\n\t\t\t\t\t\t\t[2] Setting request header [Referer][https://automation2025-1-oracle-rhel9-2.aws.akana.roguewave.com:7900/atmosphere/]\n\t\t\t\t\t\t\t[2] Setting request header [Accept-Encoding][gzip, deflate, br, zstd]\n\t\t\t\t\t\t\t[2] Setting request header [Accept-Language][en-US,en;q=0.9]\n\t\t\t\t\t\t\t[2] Setting request header [Cookie][AtmoAuthToken_automation2025-1=TokenID%3Ded2d01e2-a71d-4d45-9d4a-84fa6fd57b01%2Cclaimed_id%3Durn%3Aatmosphere%3Auser%3Aautomation2025-1%3A7505008c-9aa1-4e13-a74e-8a124c948173%2CissueTime%3D1773406107630%2CexpirationTime%3D1773407967624%2CUserName%3Dadminautomation2025-1%2CUserFDN%3D7505008c-9aa1-4e13-a74e-8a124c948173%252Eautomation2025-1%2CAttributesIncluded%3Dfalse%2Csig%3DRoU3Vzr5Jlo6wq6kAtigsQiG73NFZngSGe2TQJA0pJvdqwtgp6Ffo3DDJxvELSbJqUgcX7H18N3wEp5o4xQN6GTgwTY1JosPI7iwSfR07ZoH7gHxMBWXRMgvGmlYTxFs3if4O0HXrGQiu1dT9AwHq_YlO1C5IWDjRhyjfIreLNh0KTLM1312QANU5ZN5AljxHuscNRtuA7nvaXdLJuhQqX_QkvRJayakGT9jpfMfzoXN94CZY7KIBpH8rSxgUxpIy6isyBOP4ehCC4OQREaOeygvMO0sm5wYYbWu1-uOXRky-CDlthfGlF0RvzeAsVHrTuMMe1IdKrmIffbSTP9RXw]\n\t\t\t\t\t\t\t[2] Setting request header [Atmo-Forwarded-From][https://automation2025-1-oracle-rhel9-2.aws.akana.roguewave.com:7900/forwardproxy/1773406258109]\n\t\t\t\t\t\t\t[2] Setting request header [Transfer-Encoding][chunked]\n\t\t\t\t\t\t\t[2] Setting request header [Content-Type][application/json]\n\t\t\t\t\t\t\t[2] Setting request header [Host][akana-qa-115.aws.akana.roguewave.com:9903]\n\t\t\t\t\t\t\t[2] Setting request header [Connection][keep-alive]\n\t\t\t\t\t\t\t[2] issueHttpRequest [POST][HTTPS://petstore.swagger.io/v2/pet][HTTP/1.1]\n\t\t\t\t\t\t\t[2] com.soa.security.ssl.impl.ThreadLocalRequestContext.clear() values map size before clear [0]\n\t\t\t\t\t\t\t[2] com.soa.security.ssl.impl.ThreadLocalRequestContext.setAttribute(Class<T> type, T object) values map size [1]\n\t\t\t\t\t\t\t[2] com.soa.security.ssl.impl.ThreadLocalRequestContext.setAttribute(Class<T> type, T object) values map size [2]\n\t\t\t\t\t\t\t[2] com.soa.security.ssl.impl.ThreadLocalRequestContext.setAttribute(Class<T> type, T object) values map size [3]\n\t\t\t\t\t\t\t[2] Blocking header [content-type]\n\t\t\t\t\t\t\t[2] Blocking header [host]\n\t\t\t\t\t\t\t[2] Blocking header [connection]\n\t\t\t\t\t\t\t[2] Blocking header [transfer-encoding]\n\t\t\t\t\t\t\t[2] com.soa.transport.mime.StreamingContentWriter Content-Type [application/json]\n\t\t\t\t\t\t\t[2] Actual request header [Atmo-Forward-To][https://akana-qa-115.aws.akana.roguewave.com:9903/api10173live/pet]\n\t\t\t\t\t\t\t[2] Actual request header [sec-ch-ua-platform][\"Windows\"]\n\t\t\t\t\t\t\t[2] Actual request header [User-Agent][Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36]\n\t\t\t\t\t\t\t[2] Actual request header [Accept][application/json]\n\t\t\t\t\t\t\t[2] Actual request header [sec-ch-ua][\"Not:A-Brand\";v=\"99\", \"Google Chrome\";v=\"145\", \"Chromium\";v=\"145\"]\n\t\t\t\t\t\t\t[2] Actual request header [sec-ch-ua-mobile][?0]\n\t\t\t\t\t\t\t[2] Actual request header [Origin][https://automation2025-1-oracle-rhel9-2.aws.akana.roguewave.com:7900]\n\t\t\t\t\t\t\t[2] Actual request header [Sec-Fetch-Site][same-origin]\n\t\t\t\t\t\t\t[2] Actual request header [Sec-Fetch-Mode][cors]\n\t\t\t\t\t\t\t[2] Actual request header [Sec-Fetch-Dest][empty]\n\t\t\t\t\t\t\t[2] Actual request header [Referer][https://automation2025-1-oracle-rhel9-2.aws.akana.roguewave.com:7900/atmosphere/]\n\t\t\t\t\t\t\t[2] Actual request header [Accept-Encoding][gzip, deflate, br, zstd]\n\t\t\t\t\t\t\t[2] Actual request header [Accept-Language][en-US,en;q=0.9]\n\t\t\t\t\t\t\t[2] Actual request header [Cookie][AtmoAuthToken_automation2025-1=TokenID%3Ded2d01e2-a71d-4d45-9d4a-84fa6fd57b01%2Cclaimed_id%3Durn%3Aatmosphere%3Auser%3Aautomation2025-1%3A7505008c-9aa1-4e13-a74e-8a124c948173%2CissueTime%3D1773406107630%2CexpirationTime%3D1773407967624%2CUserName%3Dadminautomation2025-1%2CUserFDN%3D7505008c-9aa1-4e13-a74e-8a124c948173%252Eautomation2025-1%2CAttributesIncluded%3Dfalse%2Csig%3DRoU3Vzr5Jlo6wq6kAtigsQiG73NFZngSGe2TQJA0pJvdqwtgp6Ffo3DDJxvELSbJqUgcX7H18N3wEp5o4xQN6GTgwTY1JosPI7iwSfR07ZoH7gHxMBWXRMgvGmlYTxFs3if4O0HXrGQiu1dT9AwHq_YlO1C5IWDjRhyjfIreLNh0KTLM1312QANU5ZN5AljxHuscNRtuA7nvaXdLJuhQqX_QkvRJayakGT9jpfMfzoXN94CZY7KIBpH8rSxgUxpIy6isyBOP4ehCC4OQREaOeygvMO0sm5wYYbWu1-uOXRky-CDlthfGlF0RvzeAsVHrTuMMe1IdKrmIffbSTP9RXw]\n\t\t\t\t\t\t\t[2] Actual request header [Atmo-Forwarded-From][https://automation2025-1-oracle-rhel9-2.aws.akana.roguewave.com:7900/forwardproxy/1773406258109]\n\t\t\t\t\t\t\t[2] Actual request header [X-Forwarded-Host][akana-qa-115.aws.akana.roguewave.com:9903]\n\t\t\t\t\t\t\t[2] Actual request header [Content-Length][215]\n\t\t\t\t\t\t\t[2] Actual request header [Content-Type][application/json]\n\t\t\t\t\t\t\t[2] Actual request header [Host][petstore.swagger.io]\n\t\t\t\t\t\t\t[2] Actual request header [Connection][Keep-Alive]\n\t\t\t\t\t\t\t[9] Request [POST][HTTPS://petstore.swagger.io/v2/pet][HTTP/1.1] completed in [7] mS, status [HTTP/1.1 200 OK]\n\t\t\t\t\t\t\t[9] Response Header [Date][Fri, 13 Mar 2026 12:50:58 GMT]\n\t\t\t\t\t\t\t[9] Response Header [Content-Type][application/json]\n\t\t\t\t\t\t\t[9] Response Header [Transfer-Encoding][chunked]\n\t\t\t\t\t\t\t[9] Response Header [Connection][keep-alive]\n\t\t\t\t\t\t\t[9] Response Header [Access-Control-Allow-Origin][*]\n\t\t\t\t\t\t\t[9] Response Header [Access-Control-Allow-Methods][GET, POST, DELETE, PUT]\n\t\t\t\t\t\t\t[9] Response Header [Access-Control-Allow-Headers][Content-Type, api_key, Authorization]\n\t\t\t\t\t\t\t[9] Response Header [Server][Jetty(9.2.9.v20150224)]\n\t\t\t\t\t\t\t[9] com.soa.security.ssl.impl.ThreadLocalRequestContext.clear() values map size before clear [3]\n\t\t\t\t\t\t[9] End [HttpClientTransport.accept()]\n\t\t\t\t\t\t[9] HttpOutBinding:Output/Response message received for [0fda30a7-44be-418e-811b-52fc8b037fbb]. Invoking policy handlers.\n\t\t\t\t\t\t[9] Start [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]\n\t\t\t\t\t\t[9] Invoking handleMessage() in reverse on: com.soa.policy.handler.audit.ConsumerContentHandler\n\t\t\t\t\t\t[9] ConsumerContentHandler:handleMessage()\n\t\t\t\t\t\t[10] Invoking handleMessage() in reverse on: com.soa.policy.handler.audit.OutboundAuditHandler\n\t\t\t\t\t\t[10] Invoking handleMessage() in reverse on: com.soa.policy.handler.audit.ExchangePostProcessorHandler\n\t\t\t\t\t\t[10] Invoking handleMessage() in reverse on: com.soa.message.handler.endpoint.EndpointHandler\n\t\t\t\t\t\t[10] Start [com.soa.message.handler.endpoint.EndpointHandler.handleMessage()]\n\t\t\t\t\t\t[10] Looking for OperationHandler for key [PortName [HTTPS1383360332] ServiceName [{Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live.target]] in all deployed handlers of size [11]\n\t\t\t\t\t\t[10] Found OperationHandler [com.soa.message.handler.endpoint.OperationHandler@4ed3d1cb] for key [PortName [HTTPS1383360332] ServiceName [{Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live.target]]\n\t\t\t\t\t\t[10] com.soa.message.handler.endpoint.OperationHandler.handleMessage(MessageContext context) port [HTTPS1383360332] service [{Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live.target] operation [addPet]\n\t\t\t\t\t\t[10] Start [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]\n\t\t\t\t\t\t[10] End [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]\n\t\t\t\t\t\t[10] End [com.soa.message.handler.endpoint.EndpointHandler.handleMessage()]\n\t\t\t\t\t\t[10] Invoking handleMessage() in reverse on: com.soa.message.audit.handler.OutboundReportHandler\n\t\t\t\t\t\t[10] OutboundReportHandler:handleMessage()\n\t\t\t\t\t\t[10] End [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]\n\t\t\t\t\t\t[10] JSONOutgoingNormalizer:normalize [0fda30a7-44be-418e-811b-52fc8b037fbb]\n\t\t\t\t\t[10] End [HttpOutBinding.accept()]\n\t\t\t\t[10] End [HttpOutBC.handle()]\n\t\t\t\t[10] Using preset endpoint [HTTPS1383360332][{Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live.target]\n\t\t\t\t[10] SimpleRouter:send [{Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live.target]\n\t\t\t\t[10] exchange being delivered to service: {Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live.target, endpoint: HTTPS1383360332\n\t\t\t\t[10] Router:exchange being delivered to component [com.soa.http.out.component]\n\t\t\t\t[10] Start [HttpOutBC.handle()]\n\t\t\t\t\t[10] Start [HttpOutBinding.accept()]\n\t\t\t\t\t\t[10] HttpOutBinding.processCompletion()\n\t\t\t\t\t\t[10] Start [com.soa.message.handler.ChainHandler.closeHandlers(MessageContext context, boolean inReverse)]\n\t\t\t\t\t\t[10] Invoking close() in reverse on: com.soa.policy.handler.audit.ConsumerContentHandler\n\t\t\t\t\t\t[10] Invoking close() in reverse on: com.soa.policy.handler.audit.OutboundAuditHandler\n\t\t\t\t\t\t[10] Invoking close() in reverse on: com.soa.policy.handler.audit.ExchangePostProcessorHandler\n\t\t\t\t\t\t[10] Invoking close() in reverse on: com.soa.message.handler.endpoint.EndpointHandler\n\t\t\t\t\t\t[10] Start [com.soa.message.handler.ChainHandler.closeHandlers(MessageContext context, boolean inReverse)]\n\t\t\t\t\t\t[10] End [com.soa.message.handler.ChainHandler.closeHandlers(context, inReverse)]\n\t\t\t\t\t\t[10] Start [com.soa.message.handler.ChainHandler.closeHandlers(MessageContext context, boolean inReverse)]\n\t\t\t\t\t\t[10] End [com.soa.message.handler.ChainHandler.closeHandlers(context, inReverse)]\n\t\t\t\t\t\t[10] Invoking close() in reverse on: com.soa.message.audit.handler.OutboundReportHandler\n\t\t\t\t\t\t[10] End [com.soa.message.handler.ChainHandler.closeHandlers(context, inReverse)]\n\t\t\t\t\t[10] End [HttpOutBinding.accept()]\n\t\t\t\t[10] End [HttpOutBC.handle()]\n\t\t\t\t[10] Start [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]\n\t\t\t\t[10] Invoking handleMessage() in reverse on: com.soa.policy.script.handler.ScriptedPolicyHandler\n\t\t\t\t[10] Start [ScriptedPolicyHandler.perform()]\n\t\t\t\t[10] End [ScriptedPolicyHandler.perform()]\n\t\t\t\t[10] Invoking handleMessage() in reverse on: com.soa.message.handler.apicontract.APIContractHandler\n\t\t\t\t[10] Invoking handleMessage() in reverse on: com.soa.policy.quota.timeout.handler.TimeoutHandler\n\t\t\t\t[10] Invoking handleMessage() in reverse on: com.soa.message.handler.contract.ServiceContractHandler\n\t\t\t\t[10] ServiceContractHandler:handleMessage()\n\t\t\t\t[10] Invoking handleMessage() in reverse on: com.soa.message.handler.contract.ContractHandler\n\t\t\t\t[10] ContractHandler:handleMessage()\n\t\t\t\t[10] Invoking handleMessage() in reverse on: com.soa.policy.handler.audit.ConsumerContentHandler\n\t\t\t\t[10] ConsumerContentHandler:handleMessage()\n\t\t\t\t[10] Invoking handleMessage() in reverse on: com.soa.policy.handler.audit.AuditLogMessageHandler\n\t\t\t\t[10] Invoking handleMessage() in reverse on: com.soa.analytics.metrics.handler.MetricHandler\n\t\t\t\t[10] Invoking handleMessage() in reverse on: com.soa.message.handler.endpoint.ServiceHandler\n\t\t\t\t[10] ServiceHandler:handleMessage()\n\t\t\t\t[10] com.soa.message.handler.endpoint.OperationHandler.handleMessage(MessageContext context) port [] service [{Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live] operation [addPet]\n\t\t\t\t[10] Start [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]\n\t\t\t\t[10] End [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]\n\t\t\t\t[10] Invoking handleMessage() in reverse on: com.soa.policy.handler.metrics.MetricsHandler\n\t\t\t\t[10] Invoking handleMessage() in reverse on: com.soa.message.audit.handler.ReportHandler\n\t\t\t\t[10] ReportHandler:handleMessage()\n\t\t\t\t[10] Invoking handleMessage() in reverse on: com.soa.message.handler.monitoring.pipeline.PipelineMonitoringHandler\n\t\t\t\t[10] End [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]\n\t\t\t[10] End [ProcessSE.onExchange(MessageExchange)]\n\t\t\t[10] Start [JSONIncomingDenormalizer:denormalize [41af9f6b-c55e-44fb-9606-6818c5f07bdd]]\n\t\t\t[10] End [JSONIncomingDenormalizer:denormalize [41af9f6b-c55e-44fb-9606-6818c5f07bdd]]\n\t\t\t[10] Start [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]\n\t\t\t[10] Invoking handleMessage() in reverse on: com.soa.message.handler.endpoint.EndpointHandler\n\t\t\t[10] Start [com.soa.message.handler.endpoint.EndpointHandler.handleMessage()]\n\t\t\t[10] Looking for OperationHandler for key [PortName [https1768817363] ServiceName [{Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live]] in all deployed handlers of size [7]\n\t\t\t[10] Found OperationHandler [com.soa.message.handler.endpoint.OperationHandler@36a8db07] for key [PortName [https1768817363] ServiceName [{Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live]]\n\t\t\t[10] com.soa.message.handler.endpoint.OperationHandler.handleMessage(MessageContext context) port [https1768817363] service [{Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live] operation [addPet]\n\t\t\t[10] Start [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]\n\t\t\t[10] End [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]\n\t\t\t[10] End [com.soa.message.handler.endpoint.EndpointHandler.handleMessage()]\n\t\t\t[10] Invoking handleMessage() in reverse on: com.soa.policy.handler.audit.AuditLogMessageHandler\n\t\t\t[10] Invoking handleMessage() in reverse on: com.soa.policy.quota.concurrency.handler.ConcurrencyCloseHandler\n\t\t\t[10] Invoked Method: com.soa.policy.quota.concurrency.handler.ConcurrencyCloseHandler.handleMessage() ServiceName: Swagger_Petstore_1.0.7 ParameterType: OUT Status: ACTIVE Concurrency Count: 0\n\t\t\t[10] Invoking handleMessage() in reverse on: com.soa.policy.handler.metrics.MetricsHandler\n\t\t\t[10] Invoking handleMessage() in reverse on: com.soa.message.audit.handler.ReportHandler\n\t\t\t[10] ReportHandler:handleMessage()\n\t\t\t[10] End [com.soa.message.handler.ChainHandler.callHandlers(MessageContext context, boolean inReverse)]\n\t\t[10] End [com.soa.jbi.component.http.impl.HttpMultiEndpointBinding.accept(Exchange in)]\n\t\t[10] com.soa.transport.jetty.JettyTransportBinding reply ([200] OK)\n\t\t[10] com.soa.transport.mime.StreamingContentWriter Content-Type [application/json]\n\t\t[10] Blocking header [Date]\n\t\t[10] Blocking header [Content-Type]\n\t\t[10] Blocking header [Transfer-Encoding]\n\t\t[10] Blocking header [Connection]\n\t\t[10] Response header [Access-Control-Allow-Origin][*]\n\t\t[10] Response header [Access-Control-Allow-Methods][GET, POST, DELETE, PUT]\n\t\t[10] Response header [Access-Control-Allow-Headers][Content-Type, api_key, Authorization]\n\t\t[10] Blocking header [Server]\n\t\t[10] Response header [Content-Encoding][gzip]\n\t\t[11] Releasing client connection [HTTPS://petstore.swagger.io/v2/pet]\n\t\t[11] Start [com.soa.jbi.component.http.impl.HttpMultiEndpointBinding.accept(Exchange in)]\n\t\t\t[11] Match found: com.soa.message.Endpoint[serviceName={Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live, endpointName='https1768817363', address=https://akana-qa-115.aws.akana.roguewave.com:9903/api10173live, bindingName={Swagger_Petstore_1.0.7}Swagger_Petstore_Binding_0_4205608, interfaceName={Swagger_Petstore_1.0.7}Swagger_Petstore_PortType_0_2564132, virtualHost=akana-qa-115.aws.akana.roguewave.com]\n\t\t\t[11] HttpInBinding.accept(Exchange)\n\t\t\t[11] Start [com.soa.message.handler.ChainHandler.closeHandlers(MessageContext context, boolean inReverse)]\n\t\t\t[11] Invoking close() in reverse on: com.soa.message.handler.endpoint.EndpointHandler\n\t\t\t[11] Start [com.soa.message.handler.ChainHandler.closeHandlers(MessageContext context, boolean inReverse)]\n\t\t\t[11] End [com.soa.message.handler.ChainHandler.closeHandlers(context, inReverse)]\n\t\t\t[11] Start [com.soa.message.handler.ChainHandler.closeHandlers(MessageContext context, boolean inReverse)]\n\t\t\t[11] End [com.soa.message.handler.ChainHandler.closeHandlers(context, inReverse)]\n\t\t\t[11] Invoking close() in reverse on: com.soa.policy.handler.audit.AuditLogMessageHandler\n\t\t\t[11] Invoking close() in reverse on: com.soa.policy.quota.concurrency.handler.ConcurrencyCloseHandler\n\t\t\t[11] Invoked Method: com.soa.policy.quota.concurrency.handler.ConcurrencyCloseHandler.close() ServiceName: Swagger_Petstore_1.0.7 ParameterType: OUT Status: DONE Concurrency Count: 0\n\t\t\t[11] Invoking close() in reverse on: com.soa.policy.handler.metrics.MetricsHandler\n\t\t\t[11] Invoking close() in reverse on: com.soa.message.audit.handler.ReportHandler\n\t\t\t[11] End [com.soa.message.handler.ChainHandler.closeHandlers(context, inReverse)]\n\t\t\t[11] Using preset endpoint [https1768817363][{Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live]\n\t\t\t[11] SimpleRouter:send [{Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live]\n\t\t\t[11] exchange being delivered to service: {Swagger_Petstore_1.0.7}svc_5cd350a1-c57e-4a11-89b5-5f739d8adcfb.automation2025-1.live, endpoint: https1768817363\n\t\t\t[11] Router:exchange being delivered to component [bpel.process.engine]\n\t\t\t[11] Start [ProcessSE.onExchange(MessageExchange)]\n\t\t\t\t[11] Start [com.soa.message.handler.ChainHandler.closeHandlers(MessageContext context, boolean inReverse)]\n\t\t\t\t[11] Invoking close() in reverse on: com.soa.policy.script.handler.ScriptedPolicyHandler\n\t\t\t\t[11] Invoking close() in reverse on: com.soa.message.handler.apicontract.APIContractHandler\n\t\t\t\t[11] Invoking close() in reverse on: com.soa.policy.quota.timeout.handler.TimeoutHandler\n\t\t\t\t[11] Invoking close() in reverse on: com.soa.message.handler.contract.ServiceContractHandler\n\t\t\t\t[11] Invoking close() in reverse on: com.soa.message.handler.contract.ContractHandler\n\t\t\t\t[11] Invoking close() in reverse on: com.soa.policy.handler.audit.ConsumerContentHandler\n\t\t\t\t[11] Invoking close() in reverse on: com.soa.policy.handler.audit.AuditLogMessageHandler\n\t\t\t\t[11] Invoking close() in reverse on: com.soa.analytics.metrics.handler.MetricHandler\n\t\t\t\t[11] Invoking close() in reverse on: com.soa.message.handler.endpoint.ServiceHandler\n\t\t\t\t[11] Start [com.soa.message.handler.ChainHandler.closeHandlers(MessageContext context, boolean inReverse)]\n\t\t\t\t[11] End [com.soa.message.handler.ChainHandler.closeHandlers(context, inReverse)]\n\t\t\t\t[11] Start [com.soa.message.handler.ChainHandler.closeHandlers(MessageContext context, boolean inReverse)]\n\t\t\t\t[11] End [com.soa.message.handler.ChainHandler.closeHandlers(context, inReverse)]\n\t\t\t\t[11] Invoking close() in reverse on: com.soa.policy.handler.metrics.MetricsHandler\n\t\t\t\t[11] Invoking close() in reverse on: com.soa.message.audit.handler.ReportHandler\n\t\t\t\t[11] Invoking close() in reverse on: com.soa.message.handler.monitoring.pipeline.PipelineMonitoringHandler\n\t\t\t\t[11] End [com.soa.message.handler.ChainHandler.closeHandlers(context, inReverse)]\n\t\t\t[11] End [ProcessSE.onExchange(MessageExchange)]\n\t\t[11] End [com.soa.jbi.component.http.impl.HttpMultiEndpointBinding.accept(Exchange in)]\n\t[11] End [com.soa.transport.jetty.JettyTransportBinding.handle target [/pet] method [POST]]\n[11] End [Handling request for [/pet]]",
    "process.thread.name": "Jetty Worker Thread [akana-qa-115.aws.akana.roguewave.com:9903]-7",
    "log.logger": "com.soa.platform.jetty.management.impl.HttpContextHandlerImpl",
    "error.stack_trace_limited": ""
}

Customize default trace log format

You can add or remove fields from the JSON‑based Log4j trace log by updating the trace-ecs-layout-template.json file. After each update, run the recipe that configures the Log4j trace log based on the JSON format.

Run the recipe by using the following structure:

./jython.sh -m akana.container --recipe ../recipes/json-template-logger-config.json --name <container-name> --home <application-runtime-path>

Add additional fields from environment variables

To add additional fields from environment variables, update the JSON-based trace‑log template.

  1. Locate and open the trace-ecs-layout-template.json file in the recipe directory.
  2. Add the field definition to the template. For example, to include the container field, add the following in the JSON file:
    Copy
    "container": {
      "name": "$${sys:container.name:-unknown}"
    },
  3. Save the JSON file.

  4. Run the recipe.
    ./jython.sh -m akana.container --recipe ../recipes/json-template-logger-config.json --name <container-name> --home <application-runtime-path>

Add additional fields from ThreadContext

You can add fields that are available in ThreadContext to the JSON-based trace log by updating the trace-ecs-layout-template.json file. For example, to include the process.thread.name field into the JSON-based trace log, add the following to the trace-ecs-layout-template.json file.

Copy
"process.thread.name": {
    "$resolver": "thread",
    "field": "name"
  }

Save the file and run the recipe.

./jython.sh -m akana.container --recipe ../recipes/json-template-logger-config.json --name <container-name> --home <application-runtime-path>

Remove fields from the trace log layout

To remove one or more fields from the layout, delete the corresponding field entries from the JSON‑based trace log template (trace-ecs-layout-template.json).

Take the following steps:

  1. Locate and open the trace-ecs-layout-template.json file in the recipe directory.
  2. Find the field you want to remove. For example: "process.thread.name", or "container".
  3. Delete the field definition.
  4. Save the updated template.
  5. Apply the changes by running the following recipe:
    ./jython.sh -m akana.container --recipe ../recipes/json-template-logger-config.json --name <container-name> --home <application-runtime-path>

Customize exception stack trace logging

To customize how exception stack traces are logged, see Customize exception stack trace logging.

After this feature is enabled:

  • Exceptions are logged as separate log messages.
  • The main log entry includes placeholders prefixed with “Exception occurred:”, indicating where exceptions were triggered. These placeholders appear inside the main log block.

The following is an example illustrating how exceptions are separated into different log entries and how placeholders appear in the main log object:

Copy
{
    "@timestamp": "2026-03-16T08:42:44.407Z",
    "ecs.version": "1.2.0",
    "event": {
        "type": "trace"
    },
    "container": {
        "name": "nd3"
    },
    "log.level": "ERROR",
    "message": "Start [com.soa.transport.jetty.JettyTransportBinding.handle target [/pet] method [POST]]\n\t[0] com.soa.transport.jetty.JettyTransportBinding.getListenerEndpoint(Request request)\n\t[0] Looking for match for RequestURL [https://akana-qa-115.aws.akana.roguewave.com:9903/api10213live/pet] IncomingRequestURI [https://10.250.25.234:9903] RegisteredListenerURI [https://0.0.0.0:9903/api10213live] by comparing with comparator [HostPortComparatorAnonymousInnerClass created in com.soa.transport.jetty.JettyTransportBinding.getHostPortComparator()]\n\t[0] Comparing URIs first [https://10.250.25.234:9903] second [https://0.0.0.0:9903/api10213live] with below comparators.\n\t[0] Comparing ports with Port Comparator [com.soa.transport.impl.ComparatorFactory$CompositeAnyComparator[com.soa.transport.impl.ComparatorFactory$$Lambda$460/0x0000000800eca338@426f00b9, com.soa.transport.impl.ComparatorFactory$SetMembershipAnyComparator[0, -1]]]\n\t[0] Comparing first [9903] second [9903] with comparator - 1 [com.soa.transport.impl.ComparatorFactory$$Lambda$460/0x0000000800eca338@426f00b9]\n\t[0] Match found first [9903] second [9903] with comparator - 1 [com.soa.transport.impl.ComparatorFactory$$Lambda$460/0x0000000800eca338@426f00b9]\n\t[0] Match found for ports\n\t[0] Comparing hosts with Host Comparator [com.soa.transport.impl.ComparatorFactory$CompositeAnyComparator[java.lang.String$CaseInsensitiveComparator@69e61c16, com.soa.transport.impl.ComparatorFactory$LocalOrWildcardOrInetAddressComparator@20ec4d00]]\n\t[0] Comparing first [10.250.25.234] second [0.0.0.0] with comparator - 1 [java.lang.String$CaseInsensitiveComparator@69e61c16]\n\t[0] Comparing first [10.250.25.234] second [0.0.0.0] with comparator - 2 [com.soa.transport.impl.ComparatorFactory$LocalOrWildcardOrInetAddressComparator@20ec4d00]\n\t[0] com.soa.transport.impl.ComparatorFactory$LocalOrWildcardOrInetAddressComparator host1 [/10.250.25.234] host2 [/0.0.0.0] (host1.isLoopbackAddress() [false] && host2.isLoopbackAddress() [false]) || (host1.isAnyLocalAddress() [false] || host2.isAnyLocalAddress() [true]) || (host1.equals(host2) [false])\n\t[0] Match found first [10.250.25.234] second [0.0.0.0] with comparator - 2 [com.soa.transport.impl.ComparatorFactory$LocalOrWildcardOrInetAddressComparator@20ec4d00]\n\t[0] Match found for hosts\n\t[0] Comparing schemes first [https] second [https] with [java.lang.String$CaseInsensitiveComparator@69e61c16]\n\t[0] Match found for schemes.\n\t[0] com.soa.transport.jetty.JettyTransportBinding:Issuing event RequestURL [https://akana-qa-115.aws.akana.roguewave.com:9903/api10213live/pet] IncomingRequestURI [https://10.250.25.234:9903] RegisteredListenerURI [https://0.0.0.0:9903/api10213live]\n\t[0] Start [ServiceDoSRulesExecutor:evaluate()]\n\t[0] End [ServiceDoSRulesExecutor:evaluate()]\n\t[0] Start [com.soa.jbi.component.http.impl.HttpMultiEndpointBinding.accept(Exchange in)]\n\t\t[0] Start [com.soa.jbi.component.http.operation.OperationFinder.findOperation(Exchange exchange)]\n\t\t\t[0] Found operation [{Swagger_Petstore_1.0.6}addPet] quality [3]\n\t\t[0] End [com.soa.jbi.component.http.operation.OperationFinder.findOperation(Exchange exchange)]\n\t\t[0] HttpInBinding.accept(Exchange)\n\t\t[0] ReportHandler:handleMessage()\n\t\t[0] Invoked Method: com.soa.policy.quota.concurrency.handler.ConcurrencyCloseHandler.handleMessage() ServiceName: Swagger_Petstore_1.0.6 ParameterType: IN Status: ACTIVE Concurrency Count: 0\n\t\t[0] com.soa.message.handler.endpoint.OperationHandler.handleMessage(MessageContext context) port [https925736999] service [{Swagger_Petstore_1.0.6}svc_d2563513-7f96-4262-b4c6-908a75d7ca97.automation2025-1.live] operation [addPet]\n\t\t[0] Policy handler chain:handleMessage(null)\n\t\t[0] PolicyHandlerChain:handleMessage(): context.setProperty()\n\t\t[0] AuditHandler:handleMessage()\n\t\t[0] FilterHandler:handleMessage()\n\t\t[0] ContentHandler:handleMessage()\n\t\t[1] HttpProviderTransactionHandler:handleMessage()\n\t\t[1] Start [ResourceServerOAuthSecurityHandler.handleMessage()]\n\t\t\t[1] Validating token with domain [OAuth]\n\t\t\t[1] check if the token received is a JWT\n\t\t\t[1] signature verification is successful\n\t\t\t[2] Access token is valid, it implies the grant is active as well\n\t\t\t[2] Authenticated token with domain [OAuth]\n\t\t\t[2] Grant includes the required resource [openid] in scope.\n\t\t\t[2] Grant includes the required resource [scope] in scope.\n\t\t\t[2] removing OAuth token header\n\t\t\t[2] populating custom headers\n\t\t\t[2] end authenticating token for domain [OAuth]\n\t\t[2] End [ResourceServerOAuthSecurityHandler.handleMessage()]\n\t\t[2] Start [JOSEV2PolicyEnforceHandler.handleMesage()]\n\t\t\t[3] tan [openbanking.org.uk.invalid] parameter exists in request JWS but does not match the configured domain in policy [openbanking.org.uk]\n\t\t\t[3] Exception occurred: GException: tan header value is incorrect. It must match the domain name.\n\t\t[6] End [JOSEV2PolicyEnforceHandler.handleMesage()]\n\t\t[6] MessageHandler.handleMessage returned false and rest of the chain will be skipped: com.akana.policy.handler.jose.JOSEV2PolicyEnforceHandler\n\t\t[6] Start [com.akana.policy.http.validate.HttpValidatePolicyHandler.close()]\n\t\t[6] End [com.akana.policy.http.validate.HttpValidatePolicyHandler.close()]\n\t\t[6] MessageHandler.handleMessage returned false and rest of the chain will be skipped: com.soa.policy.wspolicy.handler.ext.PolicyHandlerChain\n\t\t[6] MessageHandler.handleMessage returned false and rest of the chain will be skipped: com.soa.message.handler.endpoint.EndpointHandler\n\t\t[6] com.soa.message.handler.endpoint.OperationHandler.handleMessage(MessageContext context) port [https925736999] service [{Swagger_Petstore_1.0.6}svc_d2563513-7f96-4262-b4c6-908a75d7ca97.automation2025-1.live] operation [addPet]\n\t\t[6] Fault message found but not registered in WSDL. Treating as binding fault\n\t\t[6] Policy handler chain:handleMessage(null)\n\t\t[6] PolicyHandlerChain:handleMessage(): context.setProperty()\n\t\t[6] HttpProviderTransactionHandler:handleMessage()\n\t\t[6] ContentHandler:handleMessage()\n\t\t[6] Invoked Method: com.soa.policy.quota.concurrency.handler.ConcurrencyCloseHandler.handleMessage() ServiceName: Swagger_Petstore_1.0.6 ParameterType: FAULT Status: ERROR Concurrency Count: 0\n\t\t[6] ReportHandler:handleMessage()\n\t\t[6] Exception occurred: HttpException: HTTP Error [400:Bad Request] when accessing the URI [Not specified]\n\t[6] End [com.soa.jbi.component.http.impl.HttpMultiEndpointBinding.accept(Exchange in)]\n\t[6] com.soa.transport.jetty.JettyTransportBinding reply ([400] Bad Request)\n\t[6] com.soa.transport.mime.StreamingContentWriter Content-Type [application/json]\n\t[6] commit(1.0) wrote 427 bytes\n\t[7] Start [com.soa.jbi.component.http.impl.HttpMultiEndpointBinding.accept(Exchange in)]\n\t\t[7] HttpInBinding.accept(Exchange)\n\t\t[7] Invoked Method: com.soa.policy.quota.concurrency.handler.ConcurrencyCloseHandler.close() ServiceName: Swagger_Petstore_1.0.6 ParameterType: FAULT Status: ERROR Concurrency Count: 0\n\t[8] End [com.soa.jbi.component.http.impl.HttpMultiEndpointBinding.accept(Exchange in)]\n[8] End [com.soa.transport.jetty.JettyTransportBinding.handle target [/pet] method [POST]]",
    "process.thread.name": "Jetty Worker Thread [akana-qa-115.aws.akana.roguewave.com:9903]-2",
    "log.logger": "com.soa.transport.jetty.JettyTransportBinding",
    "error.stack_trace_limited": ""
}
{
    "@timestamp": "2026-03-16T08:42:44.409Z",
    "ecs.version": "1.2.0",
    "event": {
        "type": "trace"
    },
    "container": {
        "name": "nd3"
    },
    "log.level": "ERROR",
    "message": "HTTP Error [400:Bad Request] when accessing the URI [Not specified]",
    "process.thread.name": "Jetty Worker Thread [akana-qa-115.aws.akana.roguewave.com:9903]-2",
    "log.logger": "com.soa.transport.jetty.JettyTransportBinding",
    "error.type": "com.soa.transport.http.HttpException",
    "error.message": "HTTP Error [400:Bad Request] when accessing the URI [Not specified]",
    "error.stack_trace_limited": "com.soa.transport.http.HttpException: HTTP Error [400:Bad Request] when accessing the URI [Not specified]\n\tat com.akana.policy.jose.error.handler.impl.UKOB31OpenBankingErrorHandlerImpl.buildErrorResponse(UKOB31OpenBankingErrorHandlerImpl.java:159)\n\tat com.akana.policy.jose.error.handler.impl.UKOB31OpenBankingErrorHandlerImpl.handleError(UKOB31OpenBankingErrorHandlerImpl.java:89)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)"
}
{
    "@timestamp": "2026-03-16T08:42:44.410Z",
    "ecs.version": "1.2.0",
    "event": {
        "type": "trace"
    },
    "container": {
        "name": "nd3"
    },
    "log.level": "ERROR",
    "message": "tan header value is incorrect. It must match the domain name.",
    "process.thread.name": "Jetty Worker Thread [akana-qa-115.aws.akana.roguewave.com:9903]-2",
    "log.logger": "com.soa.transport.jetty.JettyTransportBinding",
    "error.type": "com.digev.fw.exception.GException",
    "error.message": "tan header value is incorrect. It must match the domain name.",
    "error.stack_trace_limited": "com.digev.fw.exception.GException: tan header value is incorrect. It must match the domain name.\n\tat com.akana.policy.jose.validator.UKOB31DetachedJoseValidator.validate(UKOB31DetachedJoseValidator.java:58)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)"
}

If Akana logs an exception at the Warning, Debug, or Info level, the exception might not appear in the stack trace as shown below.

Copy
{
    "@timestamp": "2026-03-16T08:53:20.778Z",
    "ecs.version": "1.2.0",
    "event": {
        "type": "trace"
    },
    "container": {
        "name": "nd3"
    },
    "log.level": "ERROR",
    "message": "Start [com.soa.transport.jetty.JettyTransportBinding.handle target [/pet] method [POST]]\n\t[0] com.soa.transport.jetty.JettyTransportBinding.getListenerEndpoint(Request request)\n\t[0] Looking for match for RequestURL [https://akana-qa-115.aws.akana.roguewave.com:9903/api10213live/pet] IncomingRequestURI [https://10.250.25.234:9903] RegisteredListenerURI [https://0.0.0.0:9903/api10213live] by comparing with comparator [HostPortComparatorAnonymousInnerClass created in com.soa.transport.jetty.JettyTransportBinding.getHostPortComparator()]\n\t[0] Comparing URIs first [https://10.250.25.234:9903] second [https://0.0.0.0:9903/api10213live] with below comparators.\n\t[0] Comparing ports with Port Comparator [com.soa.transport.impl.ComparatorFactory$CompositeAnyComparator[com.soa.transport.impl.ComparatorFactory$$Lambda$460/0x0000000800eca338@426f00b9, com.soa.transport.impl.ComparatorFactory$SetMembershipAnyComparator[0, -1]]]\n\t[0] Comparing first [9903] second [9903] with comparator - 1 [com.soa.transport.impl.ComparatorFactory$$Lambda$460/0x0000000800eca338@426f00b9]\n\t[0] Match found first [9903] second [9903] with comparator - 1 [com.soa.transport.impl.ComparatorFactory$$Lambda$460/0x0000000800eca338@426f00b9]\n\t[0] Match found for ports\n\t[0] Comparing hosts with Host Comparator [com.soa.transport.impl.ComparatorFactory$CompositeAnyComparator[java.lang.String$CaseInsensitiveComparator@69e61c16, com.soa.transport.impl.ComparatorFactory$LocalOrWildcardOrInetAddressComparator@20ec4d00]]\n\t[0] Comparing first [10.250.25.234] second [0.0.0.0] with comparator - 1 [java.lang.String$CaseInsensitiveComparator@69e61c16]\n\t[0] Comparing first [10.250.25.234] second [0.0.0.0] with comparator - 2 [com.soa.transport.impl.ComparatorFactory$LocalOrWildcardOrInetAddressComparator@20ec4d00]\n\t[0] com.soa.transport.impl.ComparatorFactory$LocalOrWildcardOrInetAddressComparator host1 [/10.250.25.234] host2 [/0.0.0.0] (host1.isLoopbackAddress() [false] && host2.isLoopbackAddress() [false]) || (host1.isAnyLocalAddress() [false] || host2.isAnyLocalAddress() [true]) || (host1.equals(host2) [false])\n\t[0] Match found first [10.250.25.234] second [0.0.0.0] with comparator - 2 [com.soa.transport.impl.ComparatorFactory$LocalOrWildcardOrInetAddressComparator@20ec4d00]\n\t[0] Match found for hosts\n\t[0] Comparing schemes first [https] second [https] with [java.lang.String$CaseInsensitiveComparator@69e61c16]\n\t[0] Match found for schemes.\n\t[0] com.soa.transport.jetty.JettyTransportBinding:Issuing event RequestURL [https://akana-qa-115.aws.akana.roguewave.com:9903/api10213live/pet] IncomingRequestURI [https://10.250.25.234:9903] RegisteredListenerURI [https://0.0.0.0:9903/api10213live]\n\t[0] Start [ServiceDoSRulesExecutor:evaluate()]\n\t[0] End [ServiceDoSRulesExecutor:evaluate()]\n\t[0] Start [com.soa.jbi.component.http.impl.HttpMultiEndpointBinding.accept(Exchange in)]\n\t\t[0] Start [com.soa.jbi.component.http.operation.OperationFinder.findOperation(Exchange exchange)]\n\t\t\t[0] Found operation [{Swagger_Petstore_1.0.6}addPet] quality [3]\n\t\t[0] End [com.soa.jbi.component.http.operation.OperationFinder.findOperation(Exchange exchange)]\n\t\t[0] HttpInBinding.accept(Exchange)\n\t\t[0] ReportHandler:handleMessage()\n\t\t[0] Invoked Method: com.soa.policy.quota.concurrency.handler.ConcurrencyCloseHandler.handleMessage() ServiceName: Swagger_Petstore_1.0.6 ParameterType: IN Status: ACTIVE Concurrency Count: 0\n\t\t[0] com.soa.message.handler.endpoint.OperationHandler.handleMessage(MessageContext context) port [https925736999] service [{Swagger_Petstore_1.0.6}svc_d2563513-7f96-4262-b4c6-908a75d7ca97.automation2025-1.live] operation [addPet]\n\t\t[0] Policy handler chain:handleMessage(null)\n\t\t[0] PolicyHandlerChain:handleMessage(): context.setProperty()\n\t\t[0] AuditHandler:handleMessage()\n\t\t[0] FilterHandler:handleMessage()\n\t\t[0] ContentHandler:handleMessage()\n\t\t[0] HttpProviderTransactionHandler:handleMessage()\n\t\t[0] Start [ResourceServerOAuthSecurityHandler.handleMessage()]\n\t\t\t[1] Validating token with domain [OAuth]\n\t\t\t[1] JWT access token expired at: Mon Mar 16 08:44:37 UTC 2026\n\t\t\t[2] message not found for key: 1010975 in locale: English (United States)\n\t\t\t[4] message not found for key: 1010975 in locale: English (United States)\n\t\t\t[6] message not found for key: 1010975 in locale: English (United States)\n\t\t[6] End [ResourceServerOAuthSecurityHandler.handleMessage()]\n\t\t[6] Start [com.akana.policy.http.validate.HttpValidatePolicyHandler.close()]\n\t\t[6] End [com.akana.policy.http.validate.HttpValidatePolicyHandler.close()]\n\t\t[6] Exception occurred: MessageFaultException: 1012117 - Invalid token. The token has expired.\n\t\t[6] com.soa.message.handler.endpoint.OperationHandler.handleMessage(MessageContext context) port [https925736999] service [{Swagger_Petstore_1.0.6}svc_d2563513-7f96-4262-b4c6-908a75d7ca97.automation2025-1.live] operation [addPet]\n\t\t[6] Policy handler chain:handleMessage(null)\n\t\t[6] PolicyHandlerChain:handleMessage(): context.setProperty()\n\t\t[6] HttpProviderTransactionHandler:handleMessage()\n\t\t[6] ContentHandler:handleMessage()\n\t\t[6] Invoked Method: com.soa.policy.quota.concurrency.handler.ConcurrencyCloseHandler.handleMessage() ServiceName: Swagger_Petstore_1.0.6 ParameterType: FAULT Status: ERROR Concurrency Count: 0\n\t\t[6] ReportHandler:handleMessage()\n\t\t[6] Exception occurred: GException: Authentication challenge issued\n\t[6] End [com.soa.jbi.component.http.impl.HttpMultiEndpointBinding.accept(Exchange in)]\n\t[6] com.soa.transport.jetty.JettyTransportBinding reply ([401] Unauthorized)\n\t[6] com.soa.transport.mime.StreamingContentWriter Content-Type [application/json]\n\t[6] commit(1.0) wrote 87 bytes\n\t[7] Start [com.soa.jbi.component.http.impl.HttpMultiEndpointBinding.accept(Exchange in)]\n\t\t[7] HttpInBinding.accept(Exchange)\n\t\t[7] Invoked Method: com.soa.policy.quota.concurrency.handler.ConcurrencyCloseHandler.close() ServiceName: Swagger_Petstore_1.0.6 ParameterType: FAULT Status: ERROR Concurrency Count: 0\n\t\t[8] message not found for key: 1010975 in locale: English (United States)\n\t[8] End [com.soa.jbi.component.http.impl.HttpMultiEndpointBinding.accept(Exchange in)]\n[8] End [com.soa.transport.jetty.JettyTransportBinding.handle target [/pet] method [POST]]",
    "process.thread.name": "Jetty Worker Thread [akana-qa-115.aws.akana.roguewave.com:9903]-2",
    "log.logger": "com.soa.transport.jetty.JettyTransportBinding",
    "error.stack_trace_limited": ""
}

Elasticsearch appender-based trace logs

You can configure Elasticsearch appender to write access logs directly to Elasticsearch. For more information, see Configuring the Elasticsearch Log Plug-In to Write Container Logs to Elasticsearch.