-
Notifications
You must be signed in to change notification settings - Fork 5.4k
Description
Background and Motivation
As part of .NET 6 we updated the new LoggerMessage.Define overloads to use LogDefineOptions. (PR here and issue #50913)
Later in .NET 7, for supporting more arguments, we could add a new Define<T> API (where T is a delegate) that would take n arguments, log level, event ID, format string and LogDefineOptions to log message.
Theoretically we need an analyzer that makes sure the arguments of the new Define API are proper (ILogger etc.). The source generator would not be using the new Define (where T is delegate) API. (not source gen friendly).
Proposed API
Something like:
public static partial class LoggerMessage
{
+ public static void Define<T>(Microsoft.Extensions.Logging.LogLevel logLevel, Microsoft.Extensions.Logging.EventId eventId, string formatString, Microsoft.Extensions.Logging.LogOptions options) where T : delegate { throw null; }
}T would be a delegate but an analyzer would need to make sure it takes ILogger, Exception, etc. System.Action<Microsoft.Extensions.Logging.ILogger, T1, T2, ..., Tn, System.Exception?>
TODO
- Go through the Framework Design Guidelines and API Review Process to further investigate sample usages and investigate alternative designs and risks.
cc: @davidfowl @eerhardt