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.
Homepage: https://msbuildlog.com
View binlogs in the Browser: https://live.msbuildlog.com
Important: the NuGet package is now being published to https://nuget.org/packages/MSBuild.StructuredLogger (old location: https://nuget.org/packages/Microsoft.Build.Logging.StructuredLogger). Please update to use the new Package Id.
Thanks to SignPath.io for providing a free code signing service and to the SignPath Foundation for a free code signing certificate to sign the installer.
Install from https://msbuildlog.com.
The app updates automatically via Squirrel (after launch it checks for updates in background), next launch starts the newly downloaded latest version.
Download the latest release for arm64 or x64.
Alternatively, you can install from Homebrew:
brew install structuredlogviewer
git clone https://github.com/KirillOsenkov/MSBuildStructuredLog
cd MSBuildStructuredLog
./run.sh
Alternatively, a longer version:
dotnet build MSBuildStructuredLog.Avalonia.sln
dotnet publish MSBuildStructuredLog.Avalonia.sln --self-contained -o <some_dir>
(I used $HOME/tools/artifacts/StructuredLogViewer.Avalonia)- 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 "$@"
Windows:
- .NET Framework 4.7.2
- MSBuild 16.0
- Visual Studio 2019
Mac:
- .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:
https://www.nuget.org/packages/MSBuild.StructuredLogger
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: https://www.nuget.org/packages/MSBuild.StructuredLogger/2.1.545
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: https://github.com/KirillOsenkov/MSBuildStructuredLog/wiki/Log-Format
- 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.
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:
%localappdata%\Microsoft\MSBuildStructuredLog\LoggerExceptions.txt