-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
enhancementNew feature or requestNew feature or request
Description
Summary
Add helpers for creating strongly-typed, structured log events. Reduces string formatting errors and enables better log analysis in observability platforms.
Problem
Current logging requires manual string formatting and doesn't enforce structure:
// Easy to make mistakes, no compile-time checking
logger.LogInformation("User {UserId} performed {Action} on {Resource}",
userId, action, resource);Proposed Solution
Option 1: Source Generator Approach
// Define log events as partial methods
public static partial class LogEvents
{
[LogEvent(Level = LogLevel.Information, Message = "User {UserId} performed {Action}")]
public static partial void UserAction(this ILogger logger, string userId, string action);
[LogEvent(Level = LogLevel.Error, Message = "Operation {Operation} failed")]
public static partial void OperationFailed(this ILogger logger, string operation, Exception ex);
}
// Usage - strongly typed!
VsixTelemetry.Logger.UserAction("user123", "save");
VsixTelemetry.Logger.OperationFailed("LoadProject", exception);Option 2: Fluent Builder
VsixTelemetry.Log
.Information("User performed action")
.WithProperty("UserId", userId)
.WithProperty("Action", action)
.WithProperty("Resource", resource)
.Write();
// Or for common patterns
VsixTelemetry.Log
.Operation("LoadSolution")
.Started();
VsixTelemetry.Log
.Operation("LoadSolution")
.Succeeded(duration);
VsixTelemetry.Log
.Operation("LoadSolution")
.Failed(exception);Option 3: Event Classes
public record UserActionEvent(string UserId, string Action, string Resource);
VsixTelemetry.LogEvent(new UserActionEvent("user123", "save", "document.cs"));
// Automatically extracts properties and formats messageBenefits
- Compile-time checking of log parameters
- Consistent property naming
- Better IntelliSense support
- Easier log analysis (consistent structure)
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request