Skip to content

Commit 331e28b

Browse files
authored
Merge branch 'develop' into dependabot/github_actions/actions/download-artifact-5.0.0
2 parents 238cfe6 + 9a65ee3 commit 331e28b

File tree

6 files changed

+69
-15
lines changed

6 files changed

+69
-15
lines changed

.github/workflows/dispatch_analytics.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ jobs:
3131
environment: analytics
3232
steps:
3333
- name: Configure AWS credentials
34-
uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df
34+
uses: aws-actions/configure-aws-credentials@7474bc4690e29a8392af63c5b98e7449536d5c3a
3535
with:
3636
aws-region: eu-central-1
3737
role-to-assume: ${{ secrets.AWS_ANALYTICS_ROLE_ARN }}

.github/workflows/docs.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ jobs:
3636
- name: Build docs website
3737
run: make build-docs-website
3838
- name: Configure AWS credentials
39-
uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1
39+
uses: aws-actions/configure-aws-credentials@7474bc4690e29a8392af63c5b98e7449536d5c3a # v4.3.1
4040
with:
4141
aws-region: us-east-1
4242
role-to-assume: ${{ secrets.AWS_DOCS_ROLE_ARN }}
@@ -69,7 +69,7 @@ jobs:
6969
docfx apidocs/docfx.json
7070
7171
- name: Configure AWS credentials
72-
uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1
72+
uses: aws-actions/configure-aws-credentials@7474bc4690e29a8392af63c5b98e7449536d5c3a # v4.3.1
7373
with:
7474
aws-region: us-east-1
7575
role-to-assume: ${{ secrets.AWS_DOCS_ROLE_ARN }}

.github/workflows/e2e-tests.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ jobs:
3434
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
3535

3636
- name: Configure AWS credentials
37-
uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1
37+
uses: aws-actions/configure-aws-credentials@7474bc4690e29a8392af63c5b98e7449536d5c3a # v4.3.1
3838
with:
3939
role-to-assume: ${{ secrets.E2E_DEPLOY_ROLE }}
4040
aws-region: us-east-1
@@ -78,7 +78,7 @@ jobs:
7878
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
7979

8080
- name: Configure AWS credentials
81-
uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1
81+
uses: aws-actions/configure-aws-credentials@7474bc4690e29a8392af63c5b98e7449536d5c3a # v4.3.1
8282
with:
8383
role-to-assume: ${{ secrets.E2E_DEPLOY_ROLE }}
8484
aws-region: us-east-1
@@ -119,7 +119,7 @@ jobs:
119119
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
120120

121121
- name: Configure AWS credentials
122-
uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1
122+
uses: aws-actions/configure-aws-credentials@7474bc4690e29a8392af63c5b98e7449536d5c3a # v4.3.1
123123
with:
124124
role-to-assume: ${{ secrets.E2E_DEPLOY_ROLE }}
125125
aws-region: us-east-1
@@ -151,7 +151,7 @@ jobs:
151151
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
152152

153153
- name: Configure AWS credentials
154-
uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1
154+
uses: aws-actions/configure-aws-credentials@7474bc4690e29a8392af63c5b98e7449536d5c3a # v4.3.1
155155
with:
156156
role-to-assume: ${{ secrets.E2E_DEPLOY_ROLE }}
157157
aws-region: us-east-1
@@ -192,7 +192,7 @@ jobs:
192192
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
193193

194194
- name: Configure AWS credentials
195-
uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1
195+
uses: aws-actions/configure-aws-credentials@7474bc4690e29a8392af63c5b98e7449536d5c3a # v4.3.1
196196
with:
197197
role-to-assume: ${{ secrets.E2E_DEPLOY_ROLE }}
198198
aws-region: us-east-1

.github/workflows/reusable_publish_docs.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ jobs:
6868
poetry run mike set-default --push latest
6969
7070
- name: Configure AWS credentials
71-
uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1
71+
uses: aws-actions/configure-aws-credentials@7474bc4690e29a8392af63c5b98e7449536d5c3a # v4.3.1
7272
with:
7373
aws-region: us-east-1
7474
role-to-assume: ${{ secrets.AWS_DOCS_ROLE_ARN }}
@@ -99,7 +99,7 @@ jobs:
9999
brew install -f docfx --skip-cask-deps --ignore-dependencies
100100
docfx apidocs/docfx.json
101101
- name: Configure AWS credentials
102-
uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1
102+
uses: aws-actions/configure-aws-credentials@7474bc4690e29a8392af63c5b98e7449536d5c3a # v4.3.1
103103
with:
104104
aws-region: us-east-1
105105
role-to-assume: ${{ secrets.AWS_DOCS_ROLE_ARN }}

libraries/src/AWS.Lambda.Powertools.Logging/Internal/PowertoolsLogger.cs

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -396,14 +396,26 @@ private static bool CustomFormatter<TState>(TState state, Exception exception, o
396396
return false;
397397

398398
#if NET8_0_OR_GREATER
399-
var stateKeys = (state as IEnumerable<KeyValuePair<string, object>>)?
400-
.ToDictionary(i => i.Key, i => PowertoolsLoggerHelpers.ObjectToDictionary(i.Value));
399+
var stateKeys = new Dictionary<string, object>();
400+
if (state is IEnumerable<KeyValuePair<string, object>> keyValuePairs)
401+
{
402+
foreach (var kvp in keyValuePairs)
403+
{
404+
stateKeys[kvp.Key] = PowertoolsLoggerHelpers.ObjectToDictionary(kvp.Value);
405+
}
406+
}
401407
#else
402-
var stateKeys = (state as IEnumerable<KeyValuePair<string, object>>)?
403-
.ToDictionary(i => i.Key, i => i.Value);
408+
var stateKeys = new Dictionary<string, object>();
409+
if (state is IEnumerable<KeyValuePair<string, object>> keyValuePairs)
410+
{
411+
foreach (var kvp in keyValuePairs)
412+
{
413+
stateKeys[kvp.Key] = kvp.Value;
414+
}
415+
}
404416
#endif
405417

406-
if (stateKeys is null || stateKeys.Count != 2)
418+
if (stateKeys.Count != 2)
407419
return false;
408420

409421
if (!stateKeys.TryGetValue(_originalformat, out var originalFormat))

libraries/tests/AWS.Lambda.Powertools.Logging.Tests/PowertoolsLoggerTest.cs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1750,6 +1750,48 @@ public void Log_Cold_Start(bool willLog, string awsInitType)
17501750
// Assert
17511751
Assert.Contains($"\"coldStart\":{willLog.ToString().ToLower()}", outPut);
17521752
}
1753+
1754+
[Fact]
1755+
public void Log_WhenDuplicateKeysInState_LastValueWins()
1756+
{
1757+
// Arrange
1758+
var loggerName = Guid.NewGuid().ToString();
1759+
var service = Guid.NewGuid().ToString();
1760+
var logLevel = LogLevel.Information;
1761+
1762+
var configurations = Substitute.For<IPowertoolsConfigurations>();
1763+
configurations.Service.Returns(service);
1764+
configurations.LogLevel.Returns(logLevel.ToString());
1765+
configurations.LoggerOutputCase.Returns(LoggerOutputCase.PascalCase.ToString());
1766+
1767+
var systemWrapper = Substitute.For<IConsoleWrapper>();
1768+
1769+
var loggerConfiguration = new PowertoolsLoggerConfiguration
1770+
{
1771+
Service = service,
1772+
MinimumLogLevel = logLevel,
1773+
LoggerOutputCase = LoggerOutputCase.PascalCase,
1774+
LogOutput = systemWrapper
1775+
};
1776+
1777+
var provider = new PowertoolsLoggerProvider(loggerConfiguration, configurations);
1778+
var logger = provider.CreateLogger(loggerName);
1779+
1780+
// Create state with duplicate keys (simulating duplicate HTTP headers)
1781+
var stateWithDuplicates = new List<KeyValuePair<string, object>>
1782+
{
1783+
new("Content-Type", "application/json"),
1784+
new("Content-Type", "application/x-www-form-urlencoded"), // This should win
1785+
new("Accept", "text/html"),
1786+
new("Accept", "*/*") // This should win
1787+
};
1788+
1789+
// Act - This should not throw an exception
1790+
logger.Log(logLevel, new EventId(), stateWithDuplicates, null, (state, ex) => "Test message");
1791+
1792+
// Assert
1793+
systemWrapper.Received(1).WriteLine(Arg.Any<string>());
1794+
}
17531795

17541796
public void Dispose()
17551797
{

0 commit comments

Comments
 (0)