/// <nodoc /> public LoggingConfiguration(ILoggingConfiguration template, PathRemapper pathRemapper) : base(template) { Contract.Assume(template != null); Contract.Assume(pathRemapper != null); LogsDirectory = pathRemapper.Remap(template.LogsDirectory); RedirectedLogsDirectory = pathRemapper.Remap(template.RedirectedLogsDirectory); LogPrefix = template.LogPrefix; Log = pathRemapper.Remap(template.Log); ErrorLog = pathRemapper.Remap(template.ErrorLog); WarningLog = pathRemapper.Remap(template.WarningLog); LogExecution = template.LogExecution; ExecutionLog = pathRemapper.Remap(template.ExecutionLog); StoreFingerprints = template.StoreFingerprints; FingerprintStoreMode = template.FingerprintStoreMode; FingerprintStoreMaxEntryAgeMinutes = template.FingerprintStoreMaxEntryAgeMinutes; FingerprintsLogDirectory = pathRemapper.Remap(template.FingerprintsLogDirectory); ExecutionFingerprintStoreLogDirectory = pathRemapper.Remap(template.ExecutionFingerprintStoreLogDirectory); CacheLookupFingerprintStoreLogDirectory = pathRemapper.Remap(template.CacheLookupFingerprintStoreLogDirectory); HistoricMetadataCacheLogDirectory = pathRemapper.Remap(template.HistoricMetadataCacheLogDirectory); EngineCacheLogDirectory = pathRemapper.Remap(template.EngineCacheLogDirectory); EngineCacheCorruptFilesLogDirectory = pathRemapper.Remap(template.EngineCacheCorruptFilesLogDirectory); CustomLog = new Dictionary <AbsolutePath, (IReadOnlyList <int>, EventLevel?)>(); foreach (var kv in template.CustomLog) { CustomLog.Add(pathRemapper.Remap(kv.Key), kv.Value); } CustomLogEtwKinds = new Dictionary <AbsolutePath, string>(); foreach (var kv in template.CustomLogEtwKinds) { CustomLogEtwKinds.Add(pathRemapper.Remap(kv.Key), kv.Value); } NoLog = new List <int>(template.NoLog); NoExecutionLog = new List <int>(template.NoExecutionLog); Diagnostic = template.Diagnostic; ConsoleVerbosity = template.ConsoleVerbosity; FileVerbosity = template.FileVerbosity; LogCounters = template.LogCounters; LogStats = template.LogStats; EnableAsyncLogging = template.EnableAsyncLogging; StatsLog = pathRemapper.Remap(template.StatsLog); EventSummaryLog = pathRemapper.Remap(template.EventSummaryLog); Environment = template.Environment; RemoteTelemetry = template.RemoteTelemetry; TraceInfo = new Dictionary <string, string>(); foreach (var kv in template.TraceInfo) { TraceInfo.Add(kv.Key, kv.Value); } Color = template.Color; AnimateTaskbar = template.AnimateTaskbar; RelatedActivityId = template.RelatedActivityId; LogsToRetain = template.LogsToRetain; FancyConsole = template.FancyConsole; FancyConsoleMaxStatusPips = template.FancyConsoleMaxStatusPips; SubstSource = pathRemapper.Remap(template.SubstSource); SubstTarget = pathRemapper.Remap(template.SubstTarget); DisableLoggedPathTranslation = template.DisableLoggedPathTranslation; LogStatus = template.LogStatus; StatusFrequencyMs = template.StatusFrequencyMs; StatusLog = pathRemapper.Remap(template.StatusLog); CacheMissLog = pathRemapper.Remap(template.CacheMissLog); DevLog = pathRemapper.Remap(template.DevLog); RpcLog = pathRemapper.Remap(template.RpcLog); PipOutputLog = pathRemapper.Remap(template.PipOutputLog); FailPipOnFileAccessError = template.FailPipOnFileAccessError; LogMemory = template.LogMemory; ReplayWarnings = template.ReplayWarnings; UseCustomPipDescriptionOnConsole = template.UseCustomPipDescriptionOnConsole; CacheMissAnalysisOption = new CacheMissAnalysisOption( template.CacheMissAnalysisOption.Mode, new List <string>(template.CacheMissAnalysisOption.Keys), pathRemapper.Remap(template.CacheMissAnalysisOption.CustomPath)); CacheMissDiffFormat = template.CacheMissDiffFormat; OptimizeConsoleOutputForAzureDevOps = template.OptimizeConsoleOutputForAzureDevOps; InvocationExpandedCommandLineArguments = template.InvocationExpandedCommandLineArguments; OptimizeProgressUpdatingForAzureDevOps = template.OptimizeProgressUpdatingForAzureDevOps; OptimizeVsoAnnotationsForAzureDevOps = template.OptimizeVsoAnnotationsForAzureDevOps; }