From 1c34f54a9411a9d591feb486f8edc482dad94fdd Mon Sep 17 00:00:00 2001 From: Thomas Ardal Date: Fri, 6 Sep 2024 11:46:27 +0200 Subject: [PATCH] Initial version --- .github/workflows/dotnet.yml | 52 ++++++ .gitignore | 112 ++++++++++++ LoggerVisualizer.sln | 44 +++++ README.md | 22 +++ screenshot.png | Bin 0 -> 39992 bytes screenshot2.png | Bin 0 -> 35801 bytes screenshot3.png | Bin 0 -> 36361 bytes src/LoggerVisualizer/ExtensionEntrypoint.cs | 36 ++++ .../LoggerDebuggerVisualizerProvider.cs | 97 ++++++++++ src/LoggerVisualizer/LoggerVisualizer.csproj | 34 ++++ .../LoggerVisualizerUserControl.cs | 18 ++ .../LoggerVisualizerUserControl.xaml | 118 +++++++++++++ .../Models/LoggerViewModel.cs | 147 +++++++++++++++ .../Properties/launchSettings.json | 8 + src/LoggerVisualizer/Telemetry.cs | 86 +++++++++ src/LoggerVisualizerSource/LoggerModel.cs | 68 +++++++ .../LoggerObjectSource.cs | 167 ++++++++++++++++++ .../LoggerVisualizerSource.csproj | 13 ++ .../LoggerVisualizerVsix.csproj | 46 +++++ src/LoggerVisualizerVsix/icon.png | Bin 0 -> 3576 bytes src/LoggerVisualizerVsix/source.extension.cs | 18 ++ .../source.extension.vsixmanifest | 22 +++ 22 files changed, 1108 insertions(+) create mode 100644 .github/workflows/dotnet.yml create mode 100644 .gitignore create mode 100644 LoggerVisualizer.sln create mode 100644 README.md create mode 100644 screenshot.png create mode 100644 screenshot2.png create mode 100644 screenshot3.png create mode 100644 src/LoggerVisualizer/ExtensionEntrypoint.cs create mode 100644 src/LoggerVisualizer/LoggerDebuggerVisualizerProvider.cs create mode 100644 src/LoggerVisualizer/LoggerVisualizer.csproj create mode 100644 src/LoggerVisualizer/LoggerVisualizerUserControl.cs create mode 100644 src/LoggerVisualizer/LoggerVisualizerUserControl.xaml create mode 100644 src/LoggerVisualizer/Models/LoggerViewModel.cs create mode 100644 src/LoggerVisualizer/Properties/launchSettings.json create mode 100644 src/LoggerVisualizer/Telemetry.cs create mode 100644 src/LoggerVisualizerSource/LoggerModel.cs create mode 100644 src/LoggerVisualizerSource/LoggerObjectSource.cs create mode 100644 src/LoggerVisualizerSource/LoggerVisualizerSource.csproj create mode 100644 src/LoggerVisualizerVsix/LoggerVisualizerVsix.csproj create mode 100644 src/LoggerVisualizerVsix/icon.png create mode 100644 src/LoggerVisualizerVsix/source.extension.cs create mode 100644 src/LoggerVisualizerVsix/source.extension.vsixmanifest diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml new file mode 100644 index 0000000..488089c --- /dev/null +++ b/.github/workflows/dotnet.yml @@ -0,0 +1,52 @@ +name: build + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + workflow_dispatch: + +jobs: + build: + + runs-on: windows-latest + + steps: + - uses: actions/checkout@v4 + - uses: nuget/setup-nuget@v2 + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@v2 + - name: Update version + run: | + (Get-Content -Path src\LoggerVisualizerVsix\source.extension.vsixmanifest) | + ForEach-Object {$_ -Replace '0.1.0', '0.1.${{ github.run_number }}'} | + Set-Content -Path src\LoggerVisualizerVsix\source.extension.vsixmanifest + - name: Restore + run: nuget restore + - name: Build + run: msbuild /p:configuration=Release /p:DeployExtension=false /p:ZipPackageCompressionLevel=normal /v:m + - uses: actions/upload-artifact@v3 + with: + name: LoggerVisualizer.vsix + path: src\LoggerVisualizerVsix\bin\Release\net8.0-windows\LoggerVisualizerVsix.vsix + - name: Create Release + id: create_release + if: ${{ github.event_name == 'push' }} + uses: actions/create-release@v1.1.4 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token + with: + tag_name: 0.1.${{ github.run_number }} + release_name: Release 0.1.${{ github.run_number }} + draft: false + - name: Upload VSIX + if: ${{ github.event_name == 'push' }} + uses: actions/upload-release-asset@v1.0.2 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: src\LoggerVisualizerVsix\bin\Release\net8.0-windows\LoggerVisualizerVsix.vsix + asset_name: LoggerVisualizerVsix.vsix + asset_content_type: application/zip diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0281aab --- /dev/null +++ b/.gitignore @@ -0,0 +1,112 @@ +# Build Folders (you can keep bin if you'd like, to store dlls and pdbs) +[Bb]in/ +[Oo]bj/ + +# mstest test results +TestResults + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results +[Dd]ebug/ +[Rr]elease/ +x64/ +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.log +*.vspscc +*.vssscc +.builds + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper* + +# dotCover +*.DotSettings + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish + +# Publish Web Output +*.Publish.xml + +# NuGet Packages Directory +packages + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +[Bb]in +[Oo]bj +sql +TestResults +[Tt]est[Rr]esult* +*.Cache +ClientBin +[Ss]tyle[Cc]op.* +~$* +*.dbmdl +Generated_Code #added for RIA/Silverlight projects + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +.vs/ \ No newline at end of file diff --git a/LoggerVisualizer.sln b/LoggerVisualizer.sln new file mode 100644 index 0000000..4bbed18 --- /dev/null +++ b/LoggerVisualizer.sln @@ -0,0 +1,44 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.10.34916.146 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{09C88280-ACF9-4043-8326-9F8D891B375E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LoggerVisualizer", "src\LoggerVisualizer\LoggerVisualizer.csproj", "{782FFF6B-3794-4082-BB88-869CE205B6EC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LoggerVisualizerSource", "src\LoggerVisualizerSource\LoggerVisualizerSource.csproj", "{A1FF4041-D57C-431F-B349-B133BC77D579}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LoggerVisualizerVsix", "src\LoggerVisualizerVsix\LoggerVisualizerVsix.csproj", "{1BC66681-8DB1-4401-B9D3-A8DF34E072AC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {782FFF6B-3794-4082-BB88-869CE205B6EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {782FFF6B-3794-4082-BB88-869CE205B6EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {782FFF6B-3794-4082-BB88-869CE205B6EC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {782FFF6B-3794-4082-BB88-869CE205B6EC}.Release|Any CPU.Build.0 = Release|Any CPU + {A1FF4041-D57C-431F-B349-B133BC77D579}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A1FF4041-D57C-431F-B349-B133BC77D579}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A1FF4041-D57C-431F-B349-B133BC77D579}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A1FF4041-D57C-431F-B349-B133BC77D579}.Release|Any CPU.Build.0 = Release|Any CPU + {1BC66681-8DB1-4401-B9D3-A8DF34E072AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1BC66681-8DB1-4401-B9D3-A8DF34E072AC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1BC66681-8DB1-4401-B9D3-A8DF34E072AC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1BC66681-8DB1-4401-B9D3-A8DF34E072AC}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {782FFF6B-3794-4082-BB88-869CE205B6EC} = {09C88280-ACF9-4043-8326-9F8D891B375E} + {A1FF4041-D57C-431F-B349-B133BC77D579} = {09C88280-ACF9-4043-8326-9F8D891B375E} + {1BC66681-8DB1-4401-B9D3-A8DF34E072AC} = {09C88280-ACF9-4043-8326-9F8D891B375E} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {E2F3EFB2-8BF1-4571-A7D4-43F97741FF09} + EndGlobalSection +EndGlobal diff --git a/README.md b/README.md new file mode 100644 index 0000000..451a7e6 --- /dev/null +++ b/README.md @@ -0,0 +1,22 @@ +Logger Visualizer +==================== + +Logger Debug Visualizer for Visual Studio. + +When debugging applications and an `ILogger` is available in the code you can view the logger configuration details in a more structured and visually pleasing form: + +![Logger Visualizer](screenshot.png) + +The extension shows all configured loggers with a set of default properties. For a range of known logging providers, the extension show a special UI. Like for `EventLog`: + +![EventLog Logger Visualizer](screenshot2.png) + +And elmah.io: + +![ElmahIo Logger Visualizer](screenshot3.png) + +Feel free to reach out or send a PR if you own a provider with additional content. + +--- + +Sponsored by [elmah.io](https://elmah.io). \ No newline at end of file diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..1c7087fb2c9cb4865b931c0355d914780d95a389 GIT binary patch literal 39992 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 U{7dzu7n(OoQCX4PTY8WG7uPd0U;qFB literal 0 HcmV?d00001 diff --git a/src/LoggerVisualizer/ExtensionEntrypoint.cs b/src/LoggerVisualizer/ExtensionEntrypoint.cs new file mode 100644 index 0000000..5ea46d4 --- /dev/null +++ b/src/LoggerVisualizer/ExtensionEntrypoint.cs @@ -0,0 +1,36 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.VisualStudio.Extensibility; + +namespace LoggerVisualizer +{ + [VisualStudioContribution] + public class ExtensionEntrypoint : Extension + { + public override ExtensionConfiguration ExtensionConfiguration => new() + { + Metadata = new( + id: "LoggerVisualizer", + version: this.ExtensionAssemblyVersion, + publisherName: "elmah.io", + displayName: "ILogger Debugger Visualizer Extension", + description:"djlkæjklæ"), + }; + + /// + protected override void InitializeServices(IServiceCollection serviceCollection) + { + Telemetry.Initialize(ExtensionAssemblyVersion?.ToString()); + try + { + base.InitializeServices(serviceCollection); + } + catch (Exception ex) + { + Telemetry.TrackException(ex); + throw; + } + + // You can configure dependency injection here by adding services to the serviceCollection. + } + } +} diff --git a/src/LoggerVisualizer/LoggerDebuggerVisualizerProvider.cs b/src/LoggerVisualizer/LoggerDebuggerVisualizerProvider.cs new file mode 100644 index 0000000..81de8f9 --- /dev/null +++ b/src/LoggerVisualizer/LoggerDebuggerVisualizerProvider.cs @@ -0,0 +1,97 @@ +using Microsoft.VisualStudio.Extensibility.DebuggerVisualizers; +using Microsoft.VisualStudio.Extensibility; +using Microsoft.VisualStudio.RpcContracts.RemoteUI; +using Microsoft.Extensions.Logging; +using LoggerVisualizerSource; +using System.Collections.ObjectModel; +using LoggerVisualizer.Models; +using System.Windows.Media.Imaging; +using System.Windows; + +namespace LoggerVisualizer +{ + [VisualStudioContribution] + internal class LoggerDebuggerVisualizerProvider : DebuggerVisualizerProvider + { + public override DebuggerVisualizerProviderConfiguration DebuggerVisualizerProviderConfiguration => new("Logger Visualizer", typeof(Logger<>)) + { + VisualizerObjectSourceType = new(typeof(LoggerObjectSource)), + }; + public override async Task CreateVisualizerAsync(VisualizerTarget visualizerTarget, CancellationToken cancellationToken) + { + LoggerModel? model = null; + try + { + model = await visualizerTarget + .ObjectSource + .RequestDataAsync(jsonSerializer: null, CancellationToken.None); + } + catch (Exception ex) + { + Telemetry.TrackException(ex); + throw; + } + + return await Task.FromResult(new LoggerVisualizerUserControl(ToViewModel(model))); + } + + private LoggerRootViewModel ToViewModel(LoggerModel logger) + { + if (logger == null) return null; + var viewModel = new LoggerRootViewModel + { + Name = logger.Name, + Enabled = logger.Enabled, + MinLevel = logger.MinLevel, + MinLevelColor = MinLevelColor(logger.MinLevel), + Loggers = new ObservableCollection(logger.Loggers.Select(l => new LoggerViewModel + { + Name = l.Name, + ExternalScope = l.ExternalScope, + MinLevel = l.MinLevel, + MinLevelColor = MinLevelColor(l.MinLevel), + ShortName = "📄 " + l.Name[(1 + l.Name.LastIndexOf('.'))..].Replace("LoggerProvider", string.Empty), + // Console + IsConsole = l.Name == "Microsoft.Extensions.Logging.Console.ConsoleLoggerProvider" ? Visibility.Visible : Visibility.Collapsed, + FormatterName = l.FormatterName, + DisableColors = l.DisableColors, + LogToStandardErrorThreshold = l.LogToStandardErrorThreshold, + MaxQueueLength = l.MaxQueueLength, + QueueFullMode = l.QueueFullMode, + TimestampFormat = l.TimestampFormat, + UseUtcTimestamp = l.UseUtcTimestamp, + // EventLog + IsEventLog = l.Name == "Microsoft.Extensions.Logging.EventLog.EventLogLoggerProvider" ? Visibility.Visible : Visibility.Collapsed, + MachineName = l.MachineName, + SourceName = l.SourceName, + LogName = l.LogName, + // EventSource + IsEventSource = l.Name == "Microsoft.Extensions.Logging.EventSource.EventSourceLoggerProvider" ? Visibility.Visible : Visibility.Collapsed, + // ElmahIo + IsElmahIo = l.Name == "Elmah.Io.Extensions.Logging.ElmahIoLoggerProvider" ? Visibility.Visible : Visibility.Collapsed, + ApiKey = l.ApiKey, + LogId = l.LogId, + CanBrowse = !string.IsNullOrWhiteSpace(l.LogId) && Guid.TryParse(l.LogId, out Guid _), + CanDiagnose = !string.IsNullOrWhiteSpace(l.LogId) && Guid.TryParse(l.LogId, out Guid _) + && !string.IsNullOrWhiteSpace(l.ApiKey) && l.ApiKey.Length == 32, + })), + }; + + return viewModel; + } + + private static string MinLevelColor(string minLevel) + { + return minLevel switch + { + "Critical" => "#993636", + "Debug" => "#95c1ba", + "Error" => "#e6614f", + "Information" => "#0da58e", + "Trace" => "#ccc", + "Warning" => "#ffc936", + _ => "#6c757d", + }; + } + } +} diff --git a/src/LoggerVisualizer/LoggerVisualizer.csproj b/src/LoggerVisualizer/LoggerVisualizer.csproj new file mode 100644 index 0000000..9b62abe --- /dev/null +++ b/src/LoggerVisualizer/LoggerVisualizer.csproj @@ -0,0 +1,34 @@ + + + + net8.0-windows + enable + enable + true + https://pkgs.dev.azure.com/azure-public/vside/_packaging/msft_consumption/nuget/v3/index.json;$(RestoreAdditionalProjectSources) + + + + + + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + + + diff --git a/src/LoggerVisualizer/LoggerVisualizerUserControl.cs b/src/LoggerVisualizer/LoggerVisualizerUserControl.cs new file mode 100644 index 0000000..2da4463 --- /dev/null +++ b/src/LoggerVisualizer/LoggerVisualizerUserControl.cs @@ -0,0 +1,18 @@ +using LoggerVisualizer.Models; +using LoggerVisualizerSource; +using Microsoft.VisualStudio.Extensibility.UI; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace LoggerVisualizer +{ + internal class LoggerVisualizerUserControl : RemoteUserControl + { + public LoggerVisualizerUserControl(LoggerRootViewModel model) : base(model) + { + } + } +} diff --git a/src/LoggerVisualizer/LoggerVisualizerUserControl.xaml b/src/LoggerVisualizer/LoggerVisualizerUserControl.xaml new file mode 100644 index 0000000..8aaf102 --- /dev/null +++ b/src/LoggerVisualizer/LoggerVisualizerUserControl.xaml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +