LoggingExample.java

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
package software.amazon.lambda.durable.examples.general;

import software.amazon.lambda.durable.DurableContext;
import software.amazon.lambda.durable.DurableHandler;
import software.amazon.lambda.durable.examples.types.GreetingRequest;

/**
 * Example demonstrating DurableLogger usage for structured logging with execution context.
 *
 * <p>The logger automatically includes execution metadata (durableExecutionArn, requestId, operationId, operationName)
 * in log entries via MDC. By default, logs are suppressed during replay to avoid duplicates.
 */
public class LoggingExample extends DurableHandler<GreetingRequest, String> {

    @Override
    public String handleRequest(GreetingRequest input, DurableContext context) {
        // Log at execution level (outside any step)
        context.getLogger().info("Processing greeting for: {}", input.getName());

        // Step 1: Create greeting - logs inside step include operation context
        var greeting = context.step("create-greeting", String.class, ctx -> {
            ctx.getLogger().info("Creating greeting message");
            return "Hello, " + input.getName();
        });

        // Step 2: Transform
        var result = context.step("transform", String.class, ctx -> {
            ctx.getLogger().info("Transforming greeting to uppercase");
            return greeting.toUpperCase() + "!";
        });

        context.getLogger().info("Completed processing, result: {}", result);
        return result;
    }
}