A Roslyn analyzer that detects ILogger.Log* method calls and provides code fixes to convert them to compile-time generated logging using the [LoggerMessage] attribute for better performance.
$ dotnet add package CompileTimeLoggerA Roslyn analyzer that detects ILogger.Log* method calls and provides code fixes to convert them to compile-time generated logging using the [LoggerMessage] attribute for better performance.
The [LoggerMessage] attribute (introduced in .NET 6) enables source generation for high-performance logging:
dotnet add package CompileTimeLogger
Or via Package Manager:
Install-Package CompileTimeLogger
The analyzer detects calls like:
_logger.LogInformation("User {UserId} logged in", userId);
And offers two code fixes:
// Before
_logger.LogInformation("User {UserId} logged in", userId);
// After
LogUserLoggedIn(userId);
[LoggerMessage(Level = LogLevel.Information, Message = "User {UserId} logged in")]
private partial void LogUserLoggedIn(string userId);
// Before
_logger.LogInformation("User {UserId} logged in", userId);
// After
Log.UserLoggedIn(_logger, userId);
private static partial class Log
{
[LoggerMessage(Level = LogLevel.Information, Message = "User {UserId} logged in")]
public static partial void UserLoggedIn(ILogger logger, string userId);
}
LogTraceLogDebugLogInformationLogWarningLogErrorLogCriticalILogger and ILogger<T>_logger.LogError(ex, "message"))partial automatically[LoggerMessage] attribute support)| ID | Description |
|---|---|
| CTL001 | ILogger.Log* call can be converted to compile-time generated logging |
MIT License - see LICENSE.txt