Always use thread id in agent logs #626
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
While testing out .NET 6, we noticed that thread names were being logged for .NET managed threads instead of the actually desired thread id in agent logfiles. This happened because Log4Net prefers to log a thread name versus a thread id, and Microsoft began setting thread names for their managed threads in .NET 6. The behavior is reproducible in previous versions of the product, but only if a user explicitly set the name of a thread.
The resolution is to check/set a thread id in the log4net thread context object, and update the logging layout to log this property. This is the same approach we use to log the process id, with the exception of only ever needing to set the process id once.
Resolves #600.
Testing
Unit tests were added to verify that the thread id property is set in log4net by every possible agent log binding. The .net core mvc async integration test application was updated to set a main thread name, and assertions were added in the text fixture to verify that this thread name, and the new .net background worker thread name does not show up in the log file instead of a thread id.