AwsLambda.Host.Envelopes.CloudWatchLogs
1.3.1
dotnet add package AwsLambda.Host.Envelopes.CloudWatchLogs --version 1.3.1
NuGet\Install-Package AwsLambda.Host.Envelopes.CloudWatchLogs -Version 1.3.1
<PackageReference Include="AwsLambda.Host.Envelopes.CloudWatchLogs" Version="1.3.1" />
<PackageVersion Include="AwsLambda.Host.Envelopes.CloudWatchLogs" Version="1.3.1" />
<PackageReference Include="AwsLambda.Host.Envelopes.CloudWatchLogs" />
paket add AwsLambda.Host.Envelopes.CloudWatchLogs --version 1.3.1
#r "nuget: AwsLambda.Host.Envelopes.CloudWatchLogs, 1.3.1"
#:package AwsLambda.Host.Envelopes.CloudWatchLogs@1.3.1
#addin nuget:?package=AwsLambda.Host.Envelopes.CloudWatchLogs&version=1.3.1
#tool nuget:?package=AwsLambda.Host.Envelopes.CloudWatchLogs&version=1.3.1
AwsLambda.Host.Envelopes.CloudWatchLogs
Strongly-typed CloudWatch Logs event handling for the AwsLambda.Host framework.
Overview
This package provides envelope classes that extend the base
CloudWatchLogsEvent
with automatic base64 decoding, decompression, and deserialization of CloudWatch Logs data.
Instead of manually decoding and decompressing data from Awslogs.Data, you access the
deserialized payload directly via envelope.AwslogsContent.
| Envelope Class | Base Class | Use Case |
|---|---|---|
CloudWatchLogsEnvelope |
CloudWatchLogsEvent |
CloudWatch Logs events with plain string log data |
CloudWatchLogsEnvelope<T> |
CloudWatchLogsEvent |
CloudWatch Logs events with typed deserialized data |
Quick Start
Define your log data type and handler:
using System.Text.Json;
using AwsLambda.Host.Builder;
using AwsLambda.Host.Envelopes.CloudWatchLogs;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
var builder = LambdaApplication.CreateBuilder();
builder.Services.ConfigureEnvelopeOptions(options =>
{
options.JsonOptions.PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower;
});
var lambda = builder.Build();
// CloudWatchLogsEnvelope<T> provides access to the CloudWatch Logs event with each log message
// deserialized into type T
lambda.MapHandler(
([Event] CloudWatchLogsEnvelope<Log> logs, ILogger<Program> logger) =>
{
foreach (var logEvent in logs.AwslogsContent!.LogEvents)
{
logger.LogInformation("Log level: {Level}", logEvent.MessageContent?.Level);
logger.LogInformation("Log message: {Message}", logEvent.MessageContent?.Message);
logger.LogInformation("Request ID: {RequestId}", logEvent.MessageContent?.RequestId);
}
}
);
await lambda.RunAsync();
public record Log(string Level, string Message, string RequestId);
If your log messages are plain strings (not JSON data), use CloudWatchLogsEnvelope instead of
CloudWatchLogsEnvelope<T> to avoid deserialization errors. CloudWatchLogsEnvelope sets each
MessageContent to the raw string message without attempting deserialization.
Custom Envelopes
To implement custom deserialization logic, extend CloudWatchLogsEnvelopeBase<T>, override the
ExtractPayload method, and call base.ExtractPayload(options) to deserialize the CloudWatch Logs
envelope structure, then deserialize each log message:
// Example: Custom XML deserialization
public sealed class CloudWatchLogsXmlEnvelope<T> : CloudWatchLogsEnvelopeBase<T>
{
private static readonly XmlSerializer Serializer = new(typeof(T));
public override void ExtractPayload(EnvelopeOptions options)
{
base.ExtractPayload(options);
foreach (var logEvent in AwslogsContent!.LogEvents)
{
using var stringReader = new StringReader(logEvent.Message);
using var xmlReader = XmlReader.Create(stringReader, options.XmlReaderSettings);
logEvent.MessageContent = (T)Serializer.Deserialize(xmlReader)!;
}
}
}
This pattern allows you to support multiple serialization formats while maintaining the same envelope interface.
AOT Support
When using .NET Native AOT, register both the envelope and payload types in your
JsonSerializerContext:
[JsonSerializable(typeof(CloudWatchLogsEnvelope<LogData>))]
[JsonSerializable(typeof(LogData))]
internal partial class SerializerContext : JsonSerializerContext;
Register the serializer and configure envelope options to use the context:
builder.Services.AddLambdaSerializerWithContext<SerializerContext>();
builder.Services.ConfigureEnvelopeOptions(options =>
{
options.JsonOptions.TypeInfoResolver = SerializerContext.Default;
});
The context must be registered as the type resolver for both the envelope options and the Lambda serializer because the Lambda event and envelope payload are deserialized at different steps: the Lambda serializer deserializes the raw event, and the envelope options deserialize the envelope content into your payload type.
Other Packages
Additional packages in the aws-lambda-host framework for abstractions, observability, and event source handling.
License
This project is licensed under the MIT License. See LICENSE for details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Amazon.Lambda.CloudWatchLogsEvents (>= 2.2.0)
- Amazon.Lambda.Core (>= 2.8.0)
- AwsLambda.Host.Abstractions (>= 1.3.1)
-
net8.0
- Amazon.Lambda.CloudWatchLogsEvents (>= 2.2.0)
- Amazon.Lambda.Core (>= 2.8.0)
- AwsLambda.Host.Abstractions (>= 1.3.1)
-
net9.0
- Amazon.Lambda.CloudWatchLogsEvents (>= 2.2.0)
- Amazon.Lambda.Core (>= 2.8.0)
- AwsLambda.Host.Abstractions (>= 1.3.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|