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

Logger

public class Logger : ILogger
Provides internal logging to the NUnit framework
using System; using System.IO; using System.Runtime.CompilerServices; using System.Threading; namespace NUnit.Framework.Internal { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] public class Logger : ILogger { private static readonly string TIME_FMT = "HH:mm:ss.fff"; private static readonly string TRACE_FMT = "{0} {1,-5} [{2,2}] {3}: {4}"; private readonly string _name; private readonly string _fullname; private readonly InternalTraceLevel _maxLevel; [System.Runtime.CompilerServices.Nullable(2)] private readonly TextWriter _writer; public Logger(string name, InternalTraceLevel level, [System.Runtime.CompilerServices.Nullable(2)] TextWriter writer) { _maxLevel = level; _writer = writer; _fullname = (_name = name); int num = _fullname.LastIndexOf('.'); if (num >= 0) _name = _fullname.Substring(num + 1); } public void Error(string message) { Log(InternalTraceLevel.Error, message); } public void Error(string message, params object[] args) { Log(InternalTraceLevel.Error, message, args); } public void Warning(string message) { Log(InternalTraceLevel.Warning, message); } public void Warning(string message, params object[] args) { Log(InternalTraceLevel.Warning, message, args); } public void Info(string message) { Log(InternalTraceLevel.Info, message); } public void Info(string message, params object[] args) { Log(InternalTraceLevel.Info, message, args); } public void Debug(string message) { Log(InternalTraceLevel.Debug, message); } public void Debug(string message, params object[] args) { Log(InternalTraceLevel.Debug, message, args); } private void Log(InternalTraceLevel level, string message) { if (_maxLevel >= level) WriteLog(level, message); } private void Log(InternalTraceLevel level, string format, params object[] args) { if (_maxLevel >= level) WriteLog(level, string.Format(format, args)); } private void WriteLog(InternalTraceLevel level, string message) { _writer?.WriteLine(TRACE_FMT, DateTime.Now.ToString(TIME_FMT), (level == InternalTraceLevel.Debug) ? "Debug" : level.ToString(), Thread.CurrentThread.ManagedThreadId, _name, message); } } }