Logging Source Generator fails ungracefully with overloaded methods
JakeYallop opened this issue · 3 comments
Description
The LoggerMessage source generator fails when there are overloaded logging methods.
Reproduction Steps
public static partial class LoggerMessageGeneration
{
[LoggerMessage(EventId = 1, EventName = "LogInt", Level = LogLevel.Debug, Message = "Test message {One}")]
public static partial void Log1(ILogger logger, int one);
[LoggerMessage(EventId = 2, EventName = "LogBool", Level = LogLevel.Debug, Message = "Test message {Two}")]
public static partial void Log1(ILogger logger, bool two);
}Expected behavior
The code compiles successfully. If the LoggerMessage generator explicitly does not support logging method overloads, then a diagnostic should be emitted instead.
Consider the following code, where an overload is specified without an EventName - should this compile?
public static partial class LoggerMessageGeneration
{
[LoggerMessage(EventId = 1, Level = LogLevel.Debug, Message = "Test message {One}")]
public static partial void Log1(ILogger logger, int one);
[LoggerMessage(EventId = 2, Level = LogLevel.Debug, Message = "Test message {Two}")]
public static partial void Log1(ILogger logger, bool two);
}The current behaviour of the source generator is to use the method name as the event name, this would emit logs with different event ids that share the same event name. If there are logging providers that rely on event names being unique, this could be problematic.
Actual behavior
Emits
LoggerMessage.g.cs(19,152,19,166): error CS0102: The type 'LoggerMessageGeneration' already contains a definition for '__Log1Callback".
Regression?
No
Known Workarounds
Do not use overloaded methods when using [LoggerMessage].
Configuration
> dotnet --info
.NET SDK (reflecting any global.json):
Version: 6.0.100
Commit: 9e8b04bbff
Runtime Environment:
OS Name: Windows
OS Version: 10.0.19043
OS Platform: Windows
RID: win10-x64
Base Path: C:\Program Files\dotnet\sdk\6.0.100\
Host (useful for support):
Version: 6.0.0
Commit: 4822e3c3aa
Other information
No response
Tagging subscribers to this area: @maryamariyan
See info in area-owners.md if you want to be subscribed.
Issue Details
Description
The LoggerMessage source generator fails when there are overloaded logging methods, even if a unique EventName is defined for both.
Reproduction Steps
public static partial class LoggerMessageGeneration
{
[LoggerMessage(EventId = 1, EventName = "LogInt", Level = LogLevel.Debug, Message = "Test message {One}")]
public static partial void Log1(ILogger logger, int one);
[LoggerMessage(EventId = 2, EventName = "LogBool", Level = LogLevel.Debug, Message = "Test message {Two}")]
public static partial void Log1(ILogger logger, bool two);
}Expected behavior
The code compiles successfully. If the LoggerMessage generator explicitly does not support logging method overloads, then a diagnostic should be emitted instead.
Consider the following code, where an overload is specified without an EventName - should this compile?
public static partial class LoggerMessageGeneration
{
[LoggerMessage(EventId = 1, Level = LogLevel.Debug, Message = "Test message {One}")]
public static partial void Log1(ILogger logger, int one);
[LoggerMessage(EventId = 2, Level = LogLevel.Debug, Message = "Test message {Two}")]
public static partial void Log1(ILogger logger, bool two);
}The current behaviour of the source generator is to use the method name as the event name, this would emit logs with different event ids that shared the same event name.
Actual behavior
Emits
LoggerMessage.g.cs(19,152,19,166): error CS0102: The type 'LoggerMessageGeneration' already contains a definition for '__Log1Callback".
Regression?
No
Known Workarounds
Do not use overloaded methods when using [LoggerMessage].
Configuration
> dotnet --info
.NET SDK (reflecting any global.json):
Version: 6.0.100
Commit: 9e8b04bbff
Runtime Environment:
OS Name: Windows
OS Version: 10.0.19043
OS Platform: Windows
RID: win10-x64
Base Path: C:\Program Files\dotnet\sdk\6.0.100\
Host (useful for support):
Version: 6.0.0
Commit: 4822e3c3aa
Other information
No response
| Author: | JakeYallop |
|---|---|
| Assignees: | - |
| Labels: |
|
| Milestone: | - |
I'd love to take a look at providing a fix for this.
@JakeYallop thanks for your interest. I have a fix prepared already. It also is addressing some other source generator feedback so we would end up having to keep either one of the two. I reviewed your PR in the meantime.