Skip to content

Logging Source Generator fails ungracefully with overloaded methods #61814

@JakeYallop

Description

@JakeYallop

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions