private void Log(string content, bool isBuildMessage = false) { foreach (var logger in Loggers.Where(l => isBuildMessage ? l.IncludeBuildMessages : l != null)) { logger.Log($"{DateTime.Now.ToString("T")} - {content}"); } }
/// <summary> /// returns UserLog listener, applyable for given context /// </summary> /// <param name="context"> </param> /// <param name="host"> </param> /// <returns> </returns> public IUserLog GetLog(string context, object host) { lock (Sync) { var usableloggers = Loggers.Where(x => x.IsApplyable(context)); var enumerable = usableloggers as ILogger[] ?? usableloggers.ToArray(); if (enumerable.Any()) { return(new LoggerBasedUserLog(enumerable.ToArray(), this, (context ?? "NONAME")) { HostObject = host }); } return(new StubUserLog { HostObject = host }); } }
private bool Build(Dictionary <string, string> props, List <string> targets) { var pc = new ProjectCollection(); Log("Configuring loggers"); var loggers = new List <ILogger> { new BuildMessageLogger(Loggers.Where(l => l.IncludeBuildMessages).ToList()) }; Log($"Added {loggers.Count} loggers"); var buildParams = new BuildParameters(pc) { DetailedSummary = true, Loggers = loggers, DefaultToolsVersion = "14.0" }; var reqData = new BuildRequestData(ProjectFilePath, props, "14.0", targets.ToArray(), null); Log("Preparing for build"); try { Manager.BeginBuild(buildParams); } catch (InvalidOperationException ex) when(ex.Message.Contains("in progress")) { throw new OperationInProgressException(OperationType.Build, ex); } Log("Starting MSBuild build"); var buildResult = Manager.BuildRequest(reqData); Log($"MSBuild build complete: {buildResult.OverallResult}"); if (buildResult.OverallResult == BuildResultCode.Success) { return(true); } if (buildResult.Exception?.Message != null) { Log($"MSBuild build failed with {buildResult.Exception.GetType().Name}: {buildResult.Exception.Message}"); } return(false); }
/// <summary> /// Write a messages to the configured loggers. /// </summary> /// <param name="message">The message to log.</param> /// <param name="level">The log level for the message.</param> public static void Write(string message, LogLevel level) { Loggers.Where(x => x.Level <= level).ToList() .ForEach(x => x.Write(message, level)); }