diff --git a/README.md b/README.md
index e655439..d0474c7 100644
--- a/README.md
+++ b/README.md
@@ -169,6 +169,18 @@ public class CustomizedMaskedLogs
[LogMasked]
public string? DefaultMasked { get; set; }
+ ///
+ /// 9223372036854775807 results in "***"
+ ///
+ [LogMasked]
+ public long? DefaultMaskedLong { get; set; }
+
+ ///
+ /// 2147483647 results in "***"
+ ///
+ [LogMasked]
+ public int? DefaultMaskedInt { get; set; }
+
///
/// [123456789,123456789,123456789] results in [***,***,***]
///
@@ -211,6 +223,18 @@ public class CustomizedMaskedLogs
[LogMasked(ShowFirst = 3)]
public string? ShowFirstThreeThenDefaultMasked { get; set; }
+ ///
+ /// 9223372036854775807 results in "922***807"
+ ///
+ [LogMasked(ShowFirst = 3, ShowLast = 3)]
+ public long? ShowFirstAndLastThreeAndDefaultMaskLongInTheMiddle { get; set; }
+
+ ///
+ /// 2147483647 results in "214****647"
+ ///
+ [LogMasked(ShowFirst = 3, ShowLast = 3, PreserveLength = true)]
+ public int? ShowFirstAndLastThreeAndDefaultMaskIntInTheMiddlePreservedLength { get; set; }
+
///
/// 123456789 results in "123******"
///
@@ -230,11 +254,17 @@ public class CustomizedMaskedLogs
public string? ShowLastThreeThenDefaultMaskedPreservedLength { get; set; }
///
- /// 123456789 results in "123REMOVED"
+ /// 123456789 results in "123_REMOVED_"
///
[LogMasked(Text = "_REMOVED_", ShowFirst = 3)]
public string? ShowFirstThreeThenCustomMask { get; set; }
+ ///
+ /// d3c4a1f2-3b4e-4f5a-9b6c-7d8e9f0a1b2c results in "d3c4a_REMOVED_"
+ ///
+ [LogMasked(Text = "_REMOVED_", ShowFirst = 5)]
+ public Guid? ShowFirstFiveThenCustomMaskGuid { get; set; }
+
///
/// 123456789 results in "123_REMOVED_"
///
@@ -284,7 +314,7 @@ public class CustomizedMaskedLogs
public string? ShowFirstAndLastThreeAndCustomMaskInTheMiddlePreservedLengthIgnored { get; set; }
}
```
-snippet source | anchor
+snippet source | anchor
## 7. Masking a string property with regular expressions
diff --git a/src/Destructurama.Attributed.Tests/MaskedAttributeTests.cs b/src/Destructurama.Attributed.Tests/MaskedAttributeTests.cs
index 72dfe58..80686ac 100644
--- a/src/Destructurama.Attributed.Tests/MaskedAttributeTests.cs
+++ b/src/Destructurama.Attributed.Tests/MaskedAttributeTests.cs
@@ -15,6 +15,18 @@ public class CustomizedMaskedLogs
[LogMasked]
public string? DefaultMasked { get; set; }
+ ///
+ /// 9223372036854775807 results in "***"
+ ///
+ [LogMasked]
+ public long? DefaultMaskedLong { get; set; }
+
+ ///
+ /// 2147483647 results in "***"
+ ///
+ [LogMasked]
+ public int? DefaultMaskedInt { get; set; }
+
///
/// [123456789,123456789,123456789] results in [***,***,***]
///
@@ -57,6 +69,18 @@ public class CustomizedMaskedLogs
[LogMasked(ShowFirst = 3)]
public string? ShowFirstThreeThenDefaultMasked { get; set; }
+ ///
+ /// 9223372036854775807 results in "922***807"
+ ///
+ [LogMasked(ShowFirst = 3, ShowLast = 3)]
+ public long? ShowFirstAndLastThreeAndDefaultMaskLongInTheMiddle { get; set; }
+
+ ///
+ /// 2147483647 results in "214****647"
+ ///
+ [LogMasked(ShowFirst = 3, ShowLast = 3, PreserveLength = true)]
+ public int? ShowFirstAndLastThreeAndDefaultMaskIntInTheMiddlePreservedLength { get; set; }
+
///
/// 123456789 results in "123******"
///
@@ -76,11 +100,17 @@ public class CustomizedMaskedLogs
public string? ShowLastThreeThenDefaultMaskedPreservedLength { get; set; }
///
- /// 123456789 results in "123REMOVED"
+ /// 123456789 results in "123_REMOVED_"
///
[LogMasked(Text = "_REMOVED_", ShowFirst = 3)]
public string? ShowFirstThreeThenCustomMask { get; set; }
+ ///
+ /// d3c4a1f2-3b4e-4f5a-9b6c-7d8e9f0a1b2c results in "d3c4a_REMOVED_"
+ ///
+ [LogMasked(Text = "_REMOVED_", ShowFirst = 5)]
+ public Guid? ShowFirstFiveThenCustomMaskGuid { get; set; }
+
///
/// 123456789 results in "123_REMOVED_"
///
@@ -289,6 +319,25 @@ public void LogMaskedAttribute_Shows_First_NChars_Then_Replaces_All_With_Custom_
props["ShowFirstThreeThenCustomMask"].LiteralValue().ShouldBe("123_REMOVED_");
}
+ [Test]
+ public void LogMaskedAttribute_Shows_First_NChars_Then_Replaces_All_With_Custom_Mask_Guid()
+ {
+ // [LogMasked(Text = "_REMOVED_", ShowFirst = 5)]
+ // -> "d3c4a_REMOVED_"
+ var customized = new CustomizedMaskedLogs
+ {
+ ShowFirstFiveThenCustomMaskGuid = Guid.Parse("d3c4a1f2-3b4e-4f5a-9b6c-7d8e9f0a1b2c")
+ };
+
+ var evt = DelegatingSink.Execute(customized);
+
+ var sv = (StructureValue)evt.Properties["Customized"];
+ var props = sv.Properties.ToDictionary(p => p.Name, p => p.Value);
+
+ props.ContainsKey("ShowFirstFiveThenCustomMaskGuid").ShouldBeTrue();
+ props["ShowFirstFiveThenCustomMaskGuid"].LiteralValue().ShouldBe("d3c4a_REMOVED_");
+ }
+
[Test]
public void LogMaskedAttribute_Shows_First_NChars_Then_Replaces_All_With_Custom_Mask_PreservedLength_Ignored()
{
@@ -691,6 +740,84 @@ public void LogMaskedAttribute_Shows_First_NChars_And_Last_NChars_Then_Replaces_
props["ShowFirstAndLastThreeAndCustomMaskInTheMiddlePreservedLengthIgnored"].LiteralValue().ShouldBe("123_REMOVED_321");
}
+ [Test]
+ public void LogMaskedAttribute_Replaces_Long_Value_With_DefaultStars_Mask()
+ {
+ // [LogMasked]
+ // 9223372036854775807 -> "***"
+ var customized = new CustomizedMaskedLogs
+ {
+ DefaultMaskedLong = long.MaxValue
+ };
+
+ var evt = DelegatingSink.Execute(customized);
+
+ var sv = (StructureValue)evt.Properties["Customized"];
+ var props = sv.Properties.ToDictionary(p => p.Name, p => p.Value);
+
+ props.ContainsKey("DefaultMaskedLong").ShouldBeTrue();
+ props["DefaultMaskedLong"].LiteralValue().ShouldBe("***");
+ }
+
+ [Test]
+ public void LogMaskedAttribute_Shows_First_NChars_And_Last_NChars_Replaces_Long_Value_With_Default_StarMask()
+ {
+ // [LogMasked(ShowFirst = 3, ShowLast = 3)]
+ // 9223372036854775807 -> "922***807"
+ var customized = new CustomizedMaskedLogs
+ {
+ ShowFirstAndLastThreeAndDefaultMaskLongInTheMiddle = long.MaxValue
+ };
+
+ var evt = DelegatingSink.Execute(customized);
+
+ var sv = (StructureValue)evt.Properties["Customized"];
+ var props = sv.Properties.ToDictionary(p => p.Name, p => p.Value);
+
+ props.ContainsKey("ShowFirstAndLastThreeAndDefaultMaskLongInTheMiddle").ShouldBeTrue();
+ props["ShowFirstAndLastThreeAndDefaultMaskLongInTheMiddle"].LiteralValue().ShouldBe("922***807");
+ }
+
+ [Test]
+ public void LogMaskedAttribute_Replaces_Int_Value_With_DefaultStars_Mask()
+ {
+ // [LogMasked]
+ // 2147483647 -> "***"
+ var customized = new CustomizedMaskedLogs
+ {
+ DefaultMaskedInt = int.MaxValue
+ };
+
+ var evt = DelegatingSink.Execute(customized);
+
+ var sv = (StructureValue)evt.Properties["Customized"];
+ var props = sv.Properties.ToDictionary(p => p.Name, p => p.Value);
+
+ props.ContainsKey("DefaultMaskedInt").ShouldBeTrue();
+ props["DefaultMaskedInt"].LiteralValue().ShouldBe("***");
+ }
+
+ [Test]
+ public void LogMaskedAttribute_Shows_First_NChars_And_Last_NChars_Replaces_Int_Value_With_Default_StarMask_And_PreservedLength()
+ {
+ // [LogMasked(ShowFirst = 3, ShowLast = 3, PreserveLength = true)]
+ // 2147483647 -> "214****647"
+
+ var customized = new CustomizedMaskedLogs
+ {
+ ShowFirstAndLastThreeAndDefaultMaskIntInTheMiddlePreservedLength = int.MaxValue
+ };
+
+ var evt = DelegatingSink.Execute(customized);
+
+ var sv = (StructureValue)evt.Properties["Customized"];
+ var props = sv.Properties.ToDictionary(p => p.Name, p => p.Value);
+
+ props.ContainsKey("ShowFirstAndLastThreeAndDefaultMaskIntInTheMiddlePreservedLength").ShouldBeTrue();
+ props["ShowFirstAndLastThreeAndDefaultMaskIntInTheMiddlePreservedLength"].LiteralValue().ShouldBe("214****647");
+ }
+
+
[Test]
public void LogMaskedAttribute_Nullify_Bool_Property()
{
diff --git a/src/Destructurama.Attributed/Attributed/LogMaskedAttribute.cs b/src/Destructurama.Attributed/Attributed/LogMaskedAttribute.cs
index 4f61694..6caa70a 100644
--- a/src/Destructurama.Attributed/Attributed/LogMaskedAttribute.cs
+++ b/src/Destructurama.Attributed/Attributed/LogMaskedAttribute.cs
@@ -119,7 +119,10 @@ private LogEventPropertyValue CreateValue(object? value)
{
IEnumerable strings => new SequenceValue(strings.Select(s => new ScalarValue(FormatMaskedValue(s)))),
string s => new ScalarValue(FormatMaskedValue(s)),
- _ => ScalarValue.Null
+ long l => new ScalarValue(FormatMaskedValue(l.ToString())),
+ int i => new ScalarValue(FormatMaskedValue(i.ToString())),
+ Guid g => new ScalarValue(FormatMaskedValue(g.ToString())),
+ _ => ScalarValue.Null,
};
}
}