| File: Commands\Test\VSTest\VSTestTrace.cs | Web Access |
| Project: src\sdk\src\Cli\dotnet\dotnet.csproj (dotnet) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #nullable disable namespace Microsoft.DotNet.Cli.Commands.Test; internal class VSTestTrace { public static bool TraceEnabled { get; private set; } private static readonly string s_traceFilePath; static VSTestTrace() { TraceEnabled = int.TryParse(Environment.GetEnvironmentVariable("DOTNET_CLI_VSTEST_TRACE"), out int enabled) && enabled == 1; s_traceFilePath = Environment.GetEnvironmentVariable("DOTNET_CLI_VSTEST_TRACEFILE"); if (TraceEnabled) { Console.WriteLine($"[dotnet test - {DateTime.UtcNow}]Logging to {(!string.IsNullOrEmpty(s_traceFilePath) ? s_traceFilePath : "console")}"); } } public static void SafeWriteTrace(Func<string> messageLog) { if (!TraceEnabled) { return; } try { string message = $"[dotnet test - {DateTimeOffset.UtcNow.ToString(format: "MM/dd/yyyy HH:mm:ss.fff")}]{messageLog()}"; if (!string.IsNullOrEmpty(s_traceFilePath)) { lock (s_traceFilePath) { using StreamWriter logFile = File.AppendText(s_traceFilePath); logFile.WriteLine(message); } } else { Console.WriteLine(message); } } catch (Exception ex) { Console.WriteLine($"[dotnet test - {DateTimeOffset.UtcNow}]{ex}"); } } }