Skip to content

Amazon.Lambda.Logging.AspNetCore should support structural json logging #1144

Open
@Dreamescaper

Description

@Dreamescaper

Describe the feature

I should be able to use structural logging with lambda logger.

Use Case

I'd like to use structural logging either with CloudWatch Insights, or with third party system (e.g. DataDog).

Proposed Solution

Add Json lambda logger to DI via smth like this:

serviceCollection.AddLogging(logging =>
        {
            var loggerOptions = new LambdaJsonLoggerOptions
            {
                 ...
            };

            // Configure Lambda logging
            logging.AddLambdaJsonLogger(loggerOptions);
        });

This logger should support logging "state" object:
logger.LogInformation("Saving entity {entityId} by user {userId}.", entityId, userId);

"message": "Saving entity 123456ab-29c5-4912-aa3b-65bf845ae68b for user 1234567890.",
"state": {
	"{OriginalFormat}": "Saving transaction {transactionId} for tenant {userId}.",
	"entityId": "123456ab-29c5-4912-aa3b-65bf845ae68b",
	"userId": "1234567890"
},

This logger should support logging "scopes" object:

        using var scope = logger.BeginScope(new Dictionary<string, object>
        {
            ["requestId"] = input.RequestContext?.RequestId,
            ["userId"] = "testUser"
        });
        logger.LogInformation("Info");
"message": "Info",
"scopes": {
	"requestId": "QnU_ABCDFiAEJ9Q=",
	"userId": "testUser"
},

Ideally, if I use json logger, it shouldn't be needed to set 'AWS_LAMBDA_HANDLER_LOG_FORMAT' environment variable.

Other Information

No response

Acknowledgements

  • I may be able to implement this feature request
  • This feature might incur a breaking change

AWS .NET SDK and/or Package version used

Amazon.Lambda.Logging.AspNetCore Version="3.1.0"

Targeted .NET Platform

.NET6

Operating System and version

AmazonLinux

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions