@@ -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