Skip to content

Add logging-support module with StructuredArgumentsConverter #453

@vita-kotacka

Description

@vita-kotacka

Task specification

Add a new logging-support module to java-core providing a Logback PatternConverter (StructuredArgumentsConverter) that renders StructuredArguments.kv() fields in plain-text log output (dev and test environments).

Note

This converter is intended exclusively for developer and test log configurations (logback-dev.xml, logback-test.xml). It is not used in production — production logback configs use LogstashEncoder, which already serialises kv() fields as JSON. The converter class will be present in the production fat JAR but is never instantiated.

Background

The logstash-logback-encoder library's kv() arguments are JSON-only by default — they do not appear in plain Logback text output. To keep kv() as the structured logging API across all services while still showing the key-value pairs in developer/test console output, a custom ClassicConverter is needed.

Implementation

New module logging-support with logstash-logback-encoder as an optional dependency.

Class: com.wultra.core.logging.logback.StructuredArgumentsConverter

public class StructuredArgumentsConverter extends ClassicConverter {
    @Override
    public String convert(ILoggingEvent event) {
        Object[] args = event.getArgumentArray();
        if (args == null || args.length == 0) return "";
        StringBuilder sb = new StringBuilder();
        for (Object arg : args) {
            if (arg instanceof StructuredArgument) {
                if (sb.length() > 0) sb.append(", ");
                sb.append(arg);
            }
        }
        return sb.isEmpty() ? "" : "{" + sb + "}";
    }
}

Usage in logback XML (dev/test only):

<conversionRule conversionWord="sa" converterClass="com.wultra.core.logging.logback.StructuredArgumentsConverter"/>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg %sa%n</pattern>

Example output:

10:35:22.123 [main] INFO  c.w.EnrollmentService - action: createIdentity, state: succeeded {processId=abc-123, identityVerificationId=def-456}

References

Metadata

Metadata

Assignees

Labels

enhancementjavaPull requests that update Java code

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions