dotnet / msbuild

The Microsoft Build Engine (MSBuild) is the build platform for .NET and Visual Studio.
https://docs.microsoft.com/visualstudio/msbuild/msbuild
MIT License
5.21k stars 1.35k forks source link

MuxLogger discrepancy introduced by new event #10493

Open maridematte opened 1 month ago

maridematte commented 1 month ago

MuxLogger and normal logger have output difference of a blank line with the introduction of new event. The test (here) was made more lenient so we could get work done without this being a blocker. This issue is being created to keep track of this difference and address it in the future.

Context

When adding the new event BuildSubmissionStartedEventArgs (https://github.com/dotnet/msbuild/pull/10424) an unintentional side effect was changing how the logging output looks like. This is happening because there is a difference in event order between loggers.

Using the case of the MockLogger. The MockLogger will receive a BuildStartedEvent, log it, and then receive BuildSubmissionStartedEvent, log it, and then receive ProjectStartedEvent and log it.

flowchart LR
BS[BuildStartedEvent] --> BSS[BuildSubmissionStartedEvent] --> BS2[ProjectStartedEvent]

The MuxLogger will receive a BuildStartedEvent, ignore it, receive a BuildSubmissionStartedEvent, log it, and then receive ProjectStartedEvent when it will create an artificial BuildStartedEvent that will then log before logging ProjectStartedEvent.

flowchart LR
BS[BuildSubmissionStartedEvent] --> BSS[BuildStartedEvent] --> BS2[ProjectStartedEvent]

This causes the general event order to be different and for the outputs to be different.

AR-May commented 1 month ago

This different order might result in VS loggers either getting data in different order or not getting events before BuildStartedEvent, which is currently only BuildSubmissionStartedEvent needed for analyzers. This is acceptable until we bring analyzers to VS scenarios (checked with exp VS insertion). At this point, another aspect will surface - how to set up the analyzers along or using the MuxLogger. We will need to figure out ordering issues at that time.