Skip to content


Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.


A logger for MSBuild that records a structured representation of executed targets, tasks, property and item values. It can greatly simplify build investigations and provides a portable log interchange format (*.binlog) and a rich interactive log viewer app.

Build status NuGet package Chocolatey


View binlogs in the Browser:

Important: the NuGet package is now being published to (old location: Please update to use the new Package Id.

Thanks to for generously providing a certificate to sign the installer.


Install from

The app updates automatically via Squirrel (after launch it checks for updates in background), next launch starts the newly downloaded latest version.


Installing the Avalonia version on Mac:

There are a couple of extra steps to get the .app running on macOS since it's currently distributed as an unsigned application:

  1. In System Preferences -> Security & Privacy ensure Allow apps downloaded from: is set to App Store and identified developers.
  2. Download the (if on Intel Mac) or (if on M1/ARM) from the latest Release.
  3. If necessary, unzip the file (Safari does this for you after downloading automatically).
  4. Move the Structured Log into your Applications folder.
  5. In terminal run: chmod +x /Applications/Structured\ Log\ to give the app execution permissions
  6. Run the app. You will be prompted that the app is not signed by a known developer. Click cancel.
  7. In System Preferences -> Security & Privacy click Open anyway where the app should now be visible near the setting from step 1.

Building & Running the Avalonia version on Mac:

git clone
cd MSBuildStructuredLog

Alternatively, a longer version:

  1. dotnet build MSBuildStructuredLog.Avalonia.sln
  2. dotnet publish MSBuildStructuredLog.Avalonia.sln --self-contained -o <some_dir> (I used $HOME/tools/artifacts/StructuredLogViewer.Avalonia)
  3. make a script $HOME/bin/structured-log-viewer (or whatever's on your PATH):
#! /bin/sh
exec dotnet ${HOME}/tools/artifacts/StructuredLogViewer.Avalonia/publish/StructuredLogViewer.Avalonia.dll "$@"



  • .NET Framework 4.7.2
  • MSBuild 16.0
  • Visual Studio 2019


  • .NET 6 SDK


Starting with MSBuild 15.3 you can pass the new /bl switch to msbuild.exe to record a binary build log to msbuild.binlog, in the same folder as the project/solution being built:


or you can build the solution or open an existing log file through the viewer app:


Alternatively (useful for older versions of MSBuild) you can attach the logger to any MSBuild-based build using the logger library: StructuredLogger.dll. It is available in a NuGet package:

msbuild solution.sln /t:Rebuild /v:diag /noconlog /logger:BinaryLogger,%localappdata%\MSBuildStructuredLogViewer\app-2.1.596\StructuredLogger.dll;1.binlog

To use a portable version of the logger (e.g. with the dotnet msbuild command) you need a .NET Standard version of StructuredLogger.dll, not the .NET Framework (Desktop) version.

Download this NuGet package: and inside it there's the lib\netstandard2.0\StructuredLogger.dll. Try passing that to dotnet build like this:

dotnet msbuild Some.sln /v:diag /nologo /logger:BinaryLogger,"packages\MSBuild.StructuredLogger.2.1.545\lib\netstandard2.0\StructuredLogger.dll";"C:\Users\SomeUser\Desktop\binarylog.binlog"

Read more about the log formats here:


  • Preprocess project files (with all imports inlined), right-click on a project -> Preprocess
  • If a log has embedded files, you can view the list of files, full-text search in all files, and use the Space key (or double-click) on most nodes to view the source code.
  • Displays double-writes (when files from different sources are written to the same destination during a build, thus causing non-determinism)
  • Displays target dependencies for each target
  • Narrow down the search results using the under() or project() clauses to only display results under a certain parent or project.
  • Each node in the tree has a context menu. Ctrl+C to copy an item and the entire subtree to Clipboard as text.
  • Delete to hide nodes from the tree (to get uninteresting stuff out of the way).
  • Open and save log files (option to save log files to .xml)
  • Logs can include the source code project files and all imported files used during the build.

Investigating problems with MSBuildStructuredLog

Open an issue if you're running into something weird and I can take a look into it. If MSBuildStructuredLog crashes during the build, it will attempt to write the exception call stack to:


MSBuild Resources


A logger for MSBuild that records a structured representation of executed targets, tasks, property and item values.








No packages published