<PackageReference Include="NUnit" Version="3.2.1" />

InternalTraceWriter

A trace listener that writes to a separate file per domain and process using it.
using System.IO; using System.Text; namespace NUnit.Framework.Internal { public class InternalTraceWriter : TextWriter { private TextWriter writer; private object myLock = new object(); public override Encoding Encoding => writer.Encoding; public InternalTraceWriter(string logPath) { writer = new StreamWriter(new FileStream(logPath, FileMode.Append, FileAccess.Write, FileShare.Write)) { AutoFlush = true }; } public InternalTraceWriter(TextWriter writer) { this.writer = writer; } public override void Write(char value) { lock (myLock) { writer.Write(value); } } public override void Write(string value) { lock (myLock) { base.Write(value); } } public override void WriteLine(string value) { writer.WriteLine(value); } protected override void Dispose(bool disposing) { if (disposing && writer != null) { writer.Flush(); writer.Dispose(); writer = null; } base.Dispose(disposing); } public override void Flush() { if (writer != null) writer.Flush(); } } }