Skip to content

Commit 1f2a773

Browse files
Merge pull request #135 from Stravaig-Projects/#111-dots-bug-no-opt-out
Bug #111 Values not rendering if property key contains dots.
2 parents a7a3c96 + 89dad96 commit 1f2a773

File tree

8 files changed

+102
-14
lines changed

8 files changed

+102
-14
lines changed

release-notes/wip-release-notes.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ Date: ???
66

77
### Bugs
88

9+
- #111: Dots also get converted to underlines in structured keys.
10+
911
### Features
1012

1113
### Miscellaneous

src/.editorconfig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ guidelines=80 1px dotted 80FF00FF, 100 1px dashed B0FF0000, 120 2px solid FFFF00
1616
csharp_new_line_before_members_in_object_initializers=false
1717
csharp_preferred_modifier_order=public, private, protected, internal, new, abstract, virtual, sealed, override, static, readonly, extern, unsafe, volatile, async:suggestion
1818
csharp_style_var_elsewhere=true:suggestion
19-
csharp_style_var_for_built_in_types=true:suggestion
19+
csharp_style_var_for_built_in_types=false
2020
csharp_style_var_when_type_is_apparent=true:suggestion
2121
dotnet_style_parentheses_in_arithmetic_binary_operators=never_if_unnecessary:none
2222
dotnet_style_parentheses_in_other_binary_operators=never_if_unnecessary:none

src/Stravaig.Configuration.Diagnostics.Core/Renderers/Renderer.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace Stravaig.Configuration.Diagnostics.Renderers
88
public abstract class Renderer
99
{
1010
private const string PlaceholderPartJoin = "_";
11-
11+
1212
/// <summary>
1313
/// Creates a safely named placeholder for use in structured renderers.
1414
/// </summary>
@@ -17,9 +17,9 @@ public abstract class Renderer
1717
protected string Placeholder(params string[] parts)
1818
{
1919
StringBuilder placeholderBuilder = new StringBuilder();
20-
placeholderBuilder.Append("{");
20+
placeholderBuilder.Append('{');
2121
int partPos = 0;
22-
foreach (var part in parts)
22+
foreach (string part in parts)
2323
{
2424
if (string.IsNullOrWhiteSpace(part))
2525
continue;
@@ -31,18 +31,18 @@ protected string Placeholder(params string[] parts)
3131
foreach (char character in part)
3232
{
3333
if (charPos == 0 && character >= '0' && character <= '9')
34-
placeholderBuilder.Append("_");
35-
if (char.IsLetterOrDigit(character) || character == '.')
36-
placeholderBuilder.Append(character);
37-
else
38-
placeholderBuilder.Append("_");
34+
placeholderBuilder.Append('_');
35+
placeholderBuilder.Append(
36+
char.IsLetterOrDigit(character)
37+
? character
38+
: '_');
3939
charPos++;
4040
}
4141

4242
partPos++;
4343
}
4444

45-
placeholderBuilder.Append("}");
45+
placeholderBuilder.Append('}');
4646
return placeholderBuilder.ToString();
4747
}
4848
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using System.Collections.Generic;
2+
using Microsoft.Extensions.Configuration;
3+
using NUnit.Framework;
4+
using Shouldly;
5+
using Stravaig.Configuration.Diagnostics.Logging;
6+
7+
namespace Stravaig.Extensions.Configuration.Diagnostics.Tests.RegressionTests
8+
{
9+
[TestFixture]
10+
public class DotsBugLoggerExtensionTests : LoggerExtensionsTestBase
11+
{
12+
[Test]
13+
public void ConfigElementsWithDotsShouldRenderPropertiesInMessage()
14+
{
15+
SetupConfig(c =>
16+
{
17+
c.AddInMemoryCollection(new[]
18+
{
19+
new KeyValuePair<string, string>("ItemA", "Alpha"),
20+
new KeyValuePair<string, string>("ItemB", "Beta"),
21+
new KeyValuePair<string, string>("ItemB.A", "Beta-Alpha"),
22+
new KeyValuePair<string, string>("ItemC", "Gamma"),
23+
});
24+
});
25+
SetupLogger();
26+
27+
Logger.LogConfigurationValuesAsInformation(ConfigRoot);
28+
29+
var logs = GetLogs();
30+
logs.Count.ShouldBe(1);
31+
var log = logs[0];
32+
log.FormattedMessage.ShouldContain("ItemC : Gamma");
33+
log.FormattedMessage.ShouldContain("ItemB.A : Beta-Alpha");
34+
log.FormattedMessage.ShouldContain("ItemB : Beta");
35+
log.FormattedMessage.ShouldContain("ItemA : Alpha");
36+
}
37+
}
38+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using Microsoft.Extensions.Configuration;
4+
using NUnit.Framework;
5+
using Shouldly;
6+
using Stravaig.Configuration.Diagnostics.Serilog;
7+
using Stravaig.Extensions.Configuration.Diagnostics.Tests.__Extensions;
8+
9+
namespace Stravaig.Extensions.Configuration.Diagnostics.Tests.RegressionTests
10+
{
11+
[TestFixture]
12+
public class DotsBugSerilog : SerilogTestBase
13+
{
14+
[Test]
15+
public void ConfigElementsWithDotsShouldRenderPropertiesInMessage()
16+
{
17+
SetupConfig(c =>
18+
{
19+
c.AddInMemoryCollection(new[]
20+
{
21+
new KeyValuePair<string, string>("ItemA", "Alpha"),
22+
new KeyValuePair<string, string>("ItemB", "Beta"),
23+
new KeyValuePair<string, string>("ItemB.A", "Beta-Alpha"),
24+
new KeyValuePair<string, string>("ItemC", "Gamma"),
25+
});
26+
});
27+
SetupLogger(true);
28+
29+
Logger.LogConfigurationValuesAsInformation(ConfigRoot);
30+
31+
var logs = GetLogs();
32+
logs.Count.ShouldBe(1);
33+
var log = logs[0];
34+
35+
Console.WriteLine(log.GetMessage());
36+
Console.WriteLine(log.GetMessageTemplate());
37+
38+
log.GetMessage().ShouldContain("ItemC : \"Gamma\"");
39+
log.GetMessage().ShouldContain("ItemB.A : \"Beta-Alpha\"");
40+
log.GetMessage().ShouldContain("ItemB : \"Beta\"");
41+
log.GetMessage().ShouldContain("ItemA : \"Alpha\"");
42+
}
43+
}
44+
}

src/Stravaig.Configuration.Diagnostics.Tests/SerilogTestBase.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,16 @@ public abstract class SerilogTestBase : TestBase
1616
protected ILogger Logger;
1717
private StringBuilder _logStringBuilder;
1818
private TextWriter _logTextWriter;
19-
protected void SetupLogger()
19+
protected void SetupLogger(bool writeToConsole = false)
2020
{
2121
_logStringBuilder = new StringBuilder();
2222
_logTextWriter = new StringWriter(_logStringBuilder);
23-
Logger = new LoggerConfiguration()
23+
var loggerConfiguration = new LoggerConfiguration()
2424
.WriteTo.TextWriter(new JsonFormatter(renderMessage: true), _logTextWriter)
25-
.MinimumLevel.Verbose()
25+
.MinimumLevel.Verbose();
26+
if (writeToConsole)
27+
loggerConfiguration = loggerConfiguration.WriteTo.Console();
28+
Logger = loggerConfiguration
2629
.CreateLogger();
2730
}
2831

src/Stravaig.Configuration.Diagnostics.Tests/Stravaig.Configuration.Diagnostics.Tests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
<PackageReference Include="Serilog" Version="2.10.0" />
1414
<PackageReference Include="Serilog.Extensions.Logging" Version="3.0.1" />
1515
<PackageReference Include="Serilog.Formatting.Compact" Version="1.1.0" />
16+
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
1617
<PackageReference Include="Serilog.Sinks.TextWriter" Version="2.1.0" />
1718
<PackageReference Include="Shouldly" Version="4.0.3" />
1819
<PackageReference Include="Stravaig.Extensions.Logging.Diagnostics" Version="0.4.2" />

version.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.6.2
1+
0.7.0

0 commit comments

Comments
 (0)