diff --git a/src/Libraries/Microsoft.Extensions.Telemetry.Abstractions/Logging/LogPropertiesAttribute.cs b/src/Libraries/Microsoft.Extensions.Telemetry.Abstractions/Logging/LogPropertiesAttribute.cs
index c2d6a65cd38..ff503f977be 100644
--- a/src/Libraries/Microsoft.Extensions.Telemetry.Abstractions/Logging/LogPropertiesAttribute.cs
+++ b/src/Libraries/Microsoft.Extensions.Telemetry.Abstractions/Logging/LogPropertiesAttribute.cs
@@ -2,7 +2,6 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System;
-using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using Microsoft.Extensions.Logging;
using Microsoft.Shared.DiagnosticIds;
@@ -14,7 +13,6 @@ namespace Microsoft.Extensions.Logging;
///
///
[AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Property)]
-[Conditional("CODE_GENERATION_ATTRIBUTES")]
public sealed class LogPropertiesAttribute : Attribute
{
///
diff --git a/src/Libraries/Microsoft.Extensions.Telemetry.Abstractions/Logging/LogPropertyIgnoreAttribute.cs b/src/Libraries/Microsoft.Extensions.Telemetry.Abstractions/Logging/LogPropertyIgnoreAttribute.cs
index 954fcdeddb3..4911a6416db 100644
--- a/src/Libraries/Microsoft.Extensions.Telemetry.Abstractions/Logging/LogPropertyIgnoreAttribute.cs
+++ b/src/Libraries/Microsoft.Extensions.Telemetry.Abstractions/Logging/LogPropertyIgnoreAttribute.cs
@@ -2,7 +2,6 @@
// The .NET Foundation licenses this file to you under the MIT license.
using System;
-using System.Diagnostics;
using Microsoft.Extensions.Logging;
namespace Microsoft.Extensions.Logging;
@@ -12,7 +11,6 @@ namespace Microsoft.Extensions.Logging;
///
/// .
[AttributeUsage(AttributeTargets.Property)]
-[Conditional("CODE_GENERATION_ATTRIBUTES")]
public sealed class LogPropertyIgnoreAttribute : Attribute
{
}
diff --git a/test/Generators/Microsoft.Gen.Logging/Generated/LogPropertiesTests.cs b/test/Generators/Microsoft.Gen.Logging/Generated/LogPropertiesTests.cs
index a8c5d752fc9..589f237d2cc 100644
--- a/test/Generators/Microsoft.Gen.Logging/Generated/LogPropertiesTests.cs
+++ b/test/Generators/Microsoft.Gen.Logging/Generated/LogPropertiesTests.cs
@@ -587,4 +587,26 @@ public void LogPropertiesReadonlyRecordStructArgument()
latestRecord.StructuredState.Should().NotBeNull().And.Equal(expectedState);
}
+
+ [Fact]
+ public void LogPropertiesCorrectlyLogsObjectFromAnotherAssembly()
+ {
+ LogObjectFromAnotherAssembly(_logger, new ObjectToLog
+ {
+ PropertyToIgnore = "Foo",
+ PropertyToLog = "Bar",
+ FieldToLog = new FieldToLog { Name = "Fizz", Value = "Buzz" }
+ });
+
+ Assert.Equal(1, _logger.Collector.Count);
+
+ var state = _logger.Collector.LatestRecord.StructuredState!
+ .ToDictionary(p => p.Key, p => p.Value);
+
+ Assert.Equal(4, state.Count);
+ Assert.Contains("{OriginalFormat}", state);
+ Assert.Contains("logObject.PropertyToLog", state);
+ Assert.Contains("logObject.FieldToLog.Name", state);
+ Assert.Contains("logObject.FieldToLog.Value", state);
+ }
}
diff --git a/test/Generators/Microsoft.Gen.Logging/Generated/Microsoft.Gen.Logging.Generated.Tests.csproj b/test/Generators/Microsoft.Gen.Logging/Generated/Microsoft.Gen.Logging.Generated.Tests.csproj
index 84621f147e7..d4a72e9e371 100644
--- a/test/Generators/Microsoft.Gen.Logging/Generated/Microsoft.Gen.Logging.Generated.Tests.csproj
+++ b/test/Generators/Microsoft.Gen.Logging/Generated/Microsoft.Gen.Logging.Generated.Tests.csproj
@@ -24,5 +24,6 @@
+
diff --git a/test/Generators/Microsoft.Gen.Logging/HelperLibrary/FieldToLog.cs b/test/Generators/Microsoft.Gen.Logging/HelperLibrary/FieldToLog.cs
new file mode 100644
index 00000000000..6eb8cc08d5e
--- /dev/null
+++ b/test/Generators/Microsoft.Gen.Logging/HelperLibrary/FieldToLog.cs
@@ -0,0 +1,10 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+namespace Microsoft.Gen.Logging.Test;
+
+public class FieldToLog
+{
+ public string? Name { get; set; }
+ public string? Value { get; set; }
+}
diff --git a/test/Generators/Microsoft.Gen.Logging/HelperLibrary/Microsoft.Gen.Logging.HelperLibrary.csproj b/test/Generators/Microsoft.Gen.Logging/HelperLibrary/Microsoft.Gen.Logging.HelperLibrary.csproj
new file mode 100644
index 00000000000..0f3e6d3bedf
--- /dev/null
+++ b/test/Generators/Microsoft.Gen.Logging/HelperLibrary/Microsoft.Gen.Logging.HelperLibrary.csproj
@@ -0,0 +1,15 @@
+
+
+ Microsoft.Gen.Logging.Test
+ Test classes for Microsoft.Gen.Logging.Generated.Tests.
+
+
+
+ $(TestNetCoreTargetFrameworks)
+ $(TestNetCoreTargetFrameworks)$(ConditionalNet462)
+
+
+
+
+
+
diff --git a/test/Generators/Microsoft.Gen.Logging/HelperLibrary/ObjectToLog.cs b/test/Generators/Microsoft.Gen.Logging/HelperLibrary/ObjectToLog.cs
new file mode 100644
index 00000000000..c8e071ce6d9
--- /dev/null
+++ b/test/Generators/Microsoft.Gen.Logging/HelperLibrary/ObjectToLog.cs
@@ -0,0 +1,17 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Microsoft.Extensions.Logging;
+
+namespace Microsoft.Gen.Logging.Test;
+
+public class ObjectToLog
+{
+ [LogPropertyIgnore]
+ public string? PropertyToIgnore { get; set; }
+
+ public string? PropertyToLog { get; set; }
+
+ [LogProperties]
+ public FieldToLog? FieldToLog { get; set; }
+}
diff --git a/test/Generators/Microsoft.Gen.Logging/TestClasses/LogPropertiesExtensions.cs b/test/Generators/Microsoft.Gen.Logging/TestClasses/LogPropertiesExtensions.cs
index d2b9c05b05b..013f8d85956 100644
--- a/test/Generators/Microsoft.Gen.Logging/TestClasses/LogPropertiesExtensions.cs
+++ b/test/Generators/Microsoft.Gen.Logging/TestClasses/LogPropertiesExtensions.cs
@@ -5,6 +5,7 @@
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using Microsoft.Extensions.Logging;
+using Microsoft.Gen.Logging.Test;
namespace TestClasses
{
@@ -244,5 +245,8 @@ public override string ToString()
[LoggerMessage(6, LogLevel.Information, "Testing interface-typed argument here...")]
public static partial void LogMethodInterfaceArg(ILogger logger, [LogProperties] IMyInterface complexParam);
+
+ [LoggerMessage(7, LogLevel.Information, "Testing logging a complex object residing in another assembly...")]
+ public static partial void LogObjectFromAnotherAssembly(ILogger logger, [LogProperties] ObjectToLog logObject);
}
}
diff --git a/test/Generators/Microsoft.Gen.Logging/Unit/EmitterTests.cs b/test/Generators/Microsoft.Gen.Logging/Unit/EmitterTests.cs
index 58012c4915b..a53f1711bd3 100644
--- a/test/Generators/Microsoft.Gen.Logging/Unit/EmitterTests.cs
+++ b/test/Generators/Microsoft.Gen.Logging/Unit/EmitterTests.cs
@@ -45,6 +45,7 @@ public async Task TestEmitter()
Assembly.GetAssembly(typeof(IRedactorProvider))!,
Assembly.GetAssembly(typeof(PrivateDataAttribute))!,
Assembly.GetAssembly(typeof(BigInteger))!,
+ Assembly.GetAssembly(typeof(ObjectToLog))!
},
sources,
symbols)
diff --git a/test/Generators/Microsoft.Gen.Logging/Unit/Microsoft.Gen.Logging.Unit.Tests.csproj b/test/Generators/Microsoft.Gen.Logging/Unit/Microsoft.Gen.Logging.Unit.Tests.csproj
index e566a5dbe9f..9090a895c67 100644
--- a/test/Generators/Microsoft.Gen.Logging/Unit/Microsoft.Gen.Logging.Unit.Tests.csproj
+++ b/test/Generators/Microsoft.Gen.Logging/Unit/Microsoft.Gen.Logging.Unit.Tests.csproj
@@ -20,6 +20,7 @@
+