diff --git a/src/Destructurama.Attributed/Attributed/LogMaskedAttribute.cs b/src/Destructurama.Attributed/Attributed/LogMaskedAttribute.cs index 45c4517..cef90c7 100644 --- a/src/Destructurama.Attributed/Attributed/LogMaskedAttribute.cs +++ b/src/Destructurama.Attributed/Attributed/LogMaskedAttribute.cs @@ -54,7 +54,7 @@ private bool IsDefaultMask() private object FormatMaskedValue(string val) { if (string.IsNullOrEmpty(val)) - return val; + return PreserveLength ? val : Text; if (ShowFirst == 0 && ShowLast == 0) { diff --git a/test/Destructurama.Attributed.Tests/MaskedAttributeTests.cs b/test/Destructurama.Attributed.Tests/MaskedAttributeTests.cs index f7afc76..dbfad31 100644 --- a/test/Destructurama.Attributed.Tests/MaskedAttributeTests.cs +++ b/test/Destructurama.Attributed.Tests/MaskedAttributeTests.cs @@ -28,6 +28,12 @@ public class CustomizedMaskedLogs [LogMasked(PreserveLength = true)] public string? DefaultMaskedPreserved { get; set; } + /// + /// "" results in "***" + /// + [LogMasked] + public string? DefaultMaskedNotPreservedOnEmptyString { get; set; } + /// /// 123456789 results in "#" /// @@ -207,6 +213,33 @@ public void LogMaskedAttribute_Replaces_Value_With_DefaultStars_Mask_And_Preserv Assert.AreEqual("*********", props["DefaultMaskedPreserved"].LiteralValue()); } + [Test] + public void LogMaskedAttribute_Replaces_Value_With_DefaultStars_Mask_And_Not_Preserve_Length_On_Empty_String() + { + // [LogMasked] + // "" -> "***" + + LogEvent evt = null!; + + var log = new LoggerConfiguration() + .Destructure.UsingAttributes() + .WriteTo.Sink(new DelegatingSink(e => evt = e)) + .CreateLogger(); + + var customized = new CustomizedMaskedLogs + { + DefaultMaskedNotPreservedOnEmptyString = "" + }; + + log.Information("Here is {@Customized}", customized); + + var sv = (StructureValue)evt.Properties["Customized"]; + var props = sv.Properties.ToDictionary(p => p.Name, p => p.Value); + + Assert.IsTrue(props.ContainsKey("DefaultMaskedNotPreservedOnEmptyString")); + Assert.AreEqual("***", props["DefaultMaskedNotPreservedOnEmptyString"].LiteralValue()); + } + [Test] public void LogMaskedAttribute_Replaces_Value_With_Provided_Mask() {