public void TextWriterEventListener() { string text; using (var writer = new StringWriter(CultureInfo.InvariantCulture)) { using (var listener = new TextWriterEventListener(Events.Log, writer, DateTime.UtcNow, warningNumber => WarningState.AsWarning, EventLevel.Warning)) { listener.RegisterEventSource(TestEvents.Log); TestEvents log = TestEvents.Log; // should be captured log.AlwaysEvent("Cookie 1 "); log.CriticalEvent("Cookie 2 "); log.ErrorEvent("Cookie 3 "); log.WarningEvent("Cookie 4 "); // shouldn't be captured log.InfoEvent("Cookie 5 "); log.VerboseEvent("Cookie 6 "); } text = writer.ToString(); } XAssert.IsTrue(Regex.IsMatch(text, ".*Cookie 1 .*")); XAssert.IsTrue(Regex.IsMatch(text, ".*Cookie 2 .*")); XAssert.IsTrue(Regex.IsMatch(text, ".*Cookie 3 .*")); XAssert.IsTrue(Regex.IsMatch(text, ".*Cookie 4 .*")); XAssert.IsFalse(Regex.IsMatch(text, ".*Cookie 5 .*")); XAssert.IsFalse(Regex.IsMatch(text, ".*Cookie 6 .*")); using (var writer = new StringWriter(CultureInfo.InvariantCulture)) { using (var listener = new TextWriterEventListener(Events.Log, writer, DateTime.UtcNow, warningNumber => WarningState.AsWarning)) { listener.RegisterEventSource(TestEvents.Log); TestEvents log = TestEvents.Log; // should be captured log.AlwaysEvent("Cookie 11 "); log.CriticalEvent("Cookie 12 "); log.ErrorEvent("Cookie 13 "); log.WarningEvent("Cookie 14 "); log.InfoEvent("Cookie 15 "); log.VerboseEvent("Cookie 16 "); } text = writer.ToString(); } XAssert.IsTrue(Regex.IsMatch(text, ".*Cookie 11 .*")); XAssert.IsTrue(Regex.IsMatch(text, ".*Cookie 12 .*")); XAssert.IsTrue(Regex.IsMatch(text, ".*Cookie 13 .*")); XAssert.IsTrue(Regex.IsMatch(text, ".*Cookie 14 .*")); XAssert.IsTrue(Regex.IsMatch(text, ".*Cookie 15 .*")); XAssert.IsTrue(Regex.IsMatch(text, ".*Cookie 16 .*")); }
public void TestMessageLabels() { string text; string alwaysEventLabel = "message"; string criticalEventLabel = "critical"; string errorEventLabel = "error"; string warningEventLabel = "warning"; string suppressedWarningEventLabel = "NoWarn"; string infoEventLabel = "info"; string verboseEventLabel = "verbose"; using (var writer = new StringWriter(CultureInfo.InvariantCulture)) { using (var listener = new TextWriterEventListener(Events.Log, writer, DateTime.UtcNow, warningNumber => WarningState.AsWarning)) { listener.RegisterEventSource(TestEvents.Log); TestEvents log = TestEvents.Log; log.AlwaysEvent("Cookie 1"); log.CriticalEvent("Cookie 2"); log.ErrorEvent("Cookie 3"); log.WarningEvent("Cookie 4"); log.InfoEvent("Cookie 5"); log.VerboseEvent("Cookie 6"); } text = writer.ToString(); } XAssert.IsTrue(Regex.IsMatch(text, $"^{alwaysEventLabel} DX{(int)EventId.AlwaysEvent:D4}: Cookie 1\\r?$", RegexOptions.Multiline)); XAssert.IsTrue(Regex.IsMatch(text, $"^{criticalEventLabel} DX{(int)EventId.CriticalEvent:D4}: Cookie 2\\r?$", RegexOptions.Multiline)); XAssert.IsTrue(Regex.IsMatch(text, $"^{errorEventLabel} DX{(int)EventId.ErrorEvent:D4}: Cookie 3\\r?$", RegexOptions.Multiline)); XAssert.IsTrue(Regex.IsMatch(text, $"^{warningEventLabel} DX{(int)EventId.WarningEvent:D4}: Cookie 4\\r?$", RegexOptions.Multiline)); XAssert.IsTrue(Regex.IsMatch(text, $"^{infoEventLabel} DX{(int)EventId.InfoEvent:D4}: Cookie 5\\r?$", RegexOptions.Multiline)); XAssert.IsTrue(Regex.IsMatch(text, $"^{verboseEventLabel} DX{(int)EventId.VerboseEvent:D4}: Cookie 6\\r?$", RegexOptions.Multiline)); // suppress the warning message (similar to passing /noWarn:10002 (EventId.WarningEvent)) using (var writer = new StringWriter(CultureInfo.InvariantCulture)) { using (var listener = new TextWriterEventListener(Events.Log, writer, DateTime.UtcNow, warningNumber => WarningState.Suppressed)) { listener.RegisterEventSource(TestEvents.Log); TestEvents log = TestEvents.Log; // although we are suppressing the warning, it still should be captured (suppression only applies to console output and err/wrn files) // however, this time a different label should be used log.WarningEvent("Cookie 4"); } text = writer.ToString(); } XAssert.IsTrue(Regex.IsMatch(text, $"^{suppressedWarningEventLabel} DX{(int)EventId.WarningEvent:D4}: Cookie 4\\r?$", RegexOptions.Multiline)); }
public static IDisposable SetupLogging(EventLevel level, IEventWriter writer) { var eventListener = new TextWriterEventListener(eventSource: Events.Log, writer: writer, baseTime: DateTime.UtcNow, level: level); var primarySource = bxl.ETWLogger.Log; if (primarySource.ConstructionException != null) { // Rethrow an exception preserving the original stack trace. var edi = ExceptionDispatchInfo.Capture(primarySource.ConstructionException); edi.Throw(); // This code is unreachable, but compiler doesn't know about it. throw null; } eventListener.RegisterEventSource(primarySource); eventListener.EnableTaskDiagnostics(BuildXL.Tracing.ETWLogger.Tasks.CommonInfrastructure); AriaV2StaticState.Enable(AriaTenantToken.Key); var eventSources = new EventSource[] { bxl.ETWLogger.Log, BuildXL.Engine.Cache.ETWLogger.Log, BuildXL.Engine.ETWLogger.Log, BuildXL.Scheduler.ETWLogger.Log, BuildXL.Tracing.ETWLogger.Log, bxlScriptAnalyzer.ETWLogger.Log, BuildXL.Ide.LanguageServer.ETWLogger.Log, BuildXL.FrontEnd.Core.ETWLogger.Log, BuildXL.FrontEnd.Script.ETWLogger.Log, BuildXL.FrontEnd.Nuget.ETWLogger.Log, }; using (var listener = new TrackingEventListener(Events.Log)) { foreach (var eventSource in eventSources) { Events.Log.RegisterMergedEventSource(eventSource); } } return(eventListener); }