예제 #1
0
        public void WhenOneSourceTwoListenersConcurrently()
        {
            var consoleOutputInterceptor = new MockConsoleOutputInterceptor();
            var formatter = new EventTextFormatter(EventTextFormatter.DashSeparator);
            var logger    = MockConsoleListenerEventSource.Logger;

            TestScenario.With2Listeners(
                logger,
                (listener1, listener2) =>
            {
                listener1.LogToConsole();
                listener2.LogToConsole();
                int maxLoggedEntries   = 9;
                string criticalMessage = string.Concat("CriticalMessage");
                string infoMessage     = string.Concat("InfoMessage");
                listener1.EnableEvents(logger, EventLevel.Critical);
                listener2.EnableEvents(logger, EventLevel.Critical);
                Parallel.Invoke(Enumerable.Range(0, maxLoggedEntries).Select(i =>
                                                                             new Action(() =>
                {
                    logger.Critical(i + criticalMessage);
                })).ToArray());
            });

            var entry = Regex.Split(consoleOutputInterceptor.Ouput, formatter.Header).Where(c => !string.IsNullOrWhiteSpace(c)).SingleOrDefault();

            Assert.IsNotNull(entry);
        }
예제 #2
0
        public void WhenOneListenerTwoSources()
        {
            var consoleOutputInterceptor = new MockConsoleOutputInterceptor();
            var formatter = new EventTextFormatter(EventTextFormatter.DashSeparator);
            var logger    = MockConsoleListenerEventSource.Logger;
            var logger2   = MockConsoleListenerEventSource2.Logger;

            string message      = string.Concat("Message ", Guid.NewGuid());
            string errorMessage = string.Concat("Error ", Guid.NewGuid());

            TestScenario.With1Listener(
                new EventSource[] { logger, logger2 },
                listener =>
            {
                listener.LogToConsole();
                listener.EnableEvents(logger, EventLevel.LogAlways);
                listener.EnableEvents(logger2, EventLevel.LogAlways);
                logger.Informational(message);
                logger2.Informational(message);
            });

            var entry = Regex.Split(consoleOutputInterceptor.Ouput, formatter.Header).Where(c => !string.IsNullOrWhiteSpace(c)).SingleOrDefault();

            Assert.IsNotNull(entry);
            StringAssert.Contains(entry, "100");
        }
예제 #3
0
        public void WhenActivityIdAndRelatedActivityId()
        {
            var consoleOutputInterceptor = new MockConsoleOutputInterceptor();
            var formatter = new EventTextFormatter(EventTextFormatter.DashSeparator);
            var logger    = MockConsoleListenerEventSource.Logger;

            var activityId         = Guid.NewGuid();
            var relatedActivityId  = Guid.NewGuid();
            var previousActivityId = Guid.Empty;

            EventSource.SetCurrentThreadActivityId(activityId, out previousActivityId);
            TestScenario.With1Listener(
                logger,
                listener =>
            {
                listener.LogToConsole();
                listener.EnableEvents(logger, EventLevel.Critical);
                logger.CriticalWithRelatedActivityId("This is to log critical in Console", relatedActivityId);
            });

            EventSource.SetCurrentThreadActivityId(previousActivityId);

            var entry = Regex.Split(consoleOutputInterceptor.Ouput, formatter.Header).Where(c => !string.IsNullOrWhiteSpace(c)).SingleOrDefault();

            Assert.IsNotNull(entry);
            StringAssert.Contains(entry, "800");
            StringAssert.Contains(entry, "Keywords : None");
            Assert.AreEqual(DefaultConsoleColorMapper.Critical, consoleOutputInterceptor.OutputForegroundColor);
            StringAssert.Contains(entry, "ActivityId : " + activityId.ToString());
            StringAssert.Contains(entry, "RelatedActivityId : " + relatedActivityId.ToString());
        }
예제 #4
0
        public void UnderReleaseBufferLeak()
        {
            ResourceLeakDetector.DetectionLevel preservedLevel = ResourceLeakDetector.Level;
            try
            {
                ResourceLeakDetector.Level = ResourceLeakDetector.DetectionLevel.Paranoid;
                var eventListener = new ObservableEventListener();
                Mock <IObserver <EventEntry> > logListener = this.mockRepo.Create <IObserver <EventEntry> >();
                var eventTextFormatter = new EventTextFormatter();
                Func <EventEntry, bool> leakPredicate = y => y.TryFormatAsString(eventTextFormatter).Contains("LEAK");
                logListener.Setup(x => x.OnNext(It.Is <EventEntry>(y => leakPredicate(y)))).Verifiable();
                logListener.Setup(x => x.OnNext(It.Is <EventEntry>(y => !leakPredicate(y))));
                eventListener.Subscribe(logListener.Object);
                eventListener.EnableEvents(DefaultEventSource.Log, EventLevel.Verbose);

                this.CreateAndForgetBuffer();

                GC.Collect();
                GC.WaitForPendingFinalizers();

                this.mockRepo.Verify();
            }
            finally
            {
                ResourceLeakDetector.Level = preservedLevel;
            }
        }
        public void WritesDetailedOnEventLevel()
        {
            var formatter = new EventTextFormatter(EventTextFormatter.DashSeparator)
            {
                VerbosityThreshold = EventLevel.Critical
            };

            using (var listener = new InMemoryEventListener(formatter))
            {
                listener.EnableEvents(Logger, EventLevel.LogAlways, EventKeywords.All);

                Logger.Failure("Summary");
                formatter.VerbosityThreshold = EventLevel.Error;
                Logger.Failure("Detailed");

                var entries = Regex.Split(listener.ToString(), formatter.Header + "\r\n").Where(c => !string.IsNullOrWhiteSpace(c)).ToList();

                StringAssert.Contains(entries[0], "EventId : 1");
                StringAssert.Contains(entries[0], "Level : Error");
                StringAssert.Contains(entries[0], "Payload : [message : Summary]");

                StringAssert.Contains(entries[1],
                                      @"ProviderId : 659518be-d338-564b-2759-c63c10ef82e2
EventId : 1
Keywords : 4
Level : Error
Message : Application Failure: Detailed
Opcode : Info
Task : 65533
Version : 0
Payload : [message : Detailed] 
EventName : FailureInfo");
            }
        }
        public void SkipsEmptyActivityIdsOnSummary()
        {
            var formatter = new EventTextFormatter(verbosityThreshold: EventLevel.Critical);

            using (var writer = new StringWriter())
            {
                formatter.WriteEvent(
                    new EventEntry(
                        Guid.NewGuid(),
                        0,
                        string.Empty,
                        new System.Collections.ObjectModel.ReadOnlyCollection <object>(new object[0]),
                        DateTimeOffset.MaxValue,
                        Guid.Empty,
                        Guid.Empty,
                        new EventSourceSchemaReader().GetSchema(Logger).Values.First()),
                    writer);

                var message = writer.ToString();

                var activityIdMatch        = Regex.Match(message, "\\bActivityId : (?<id>[-A-Fa-f0-9]+)\\w?").Groups["id"].Value;
                var relatedActivityIdMatch = Regex.Match(message, "\\bRelatedActivityId : (?<id>[-A-Fa-f0-9]+)\\w?").Groups["id"].Value;

                Assert.AreEqual(string.Empty, relatedActivityIdMatch);
                Assert.AreEqual(string.Empty, relatedActivityIdMatch);
            }
        }
예제 #7
0
        private static async Task SendSuccessMailInternal([NotNull] string description, [NotNull] string message, TimeSpan duration)
        {
            var    errors         = EventSourceRegistrar.GetSessionErrors();
            var    eventFormatter = new EventTextFormatter();
            string errorsText;

            using (var writer = new StringWriter())
            {
                foreach (var error in errors)
                {
                    eventFormatter.WriteEvent(error, writer);
                }
                errorsText = writer.ToString();
            }

            CommonEventSource.Log.SendSuccessMailStart(description);

            var from    = new EmailAddress("*****@*****.**", "HLTBS webjobs");
            var to      = new EmailAddress("*****@*****.**", "HLTBS contact");
            var subject = String.Format(CultureInfo.InvariantCulture, "{0} - Success ({1}) [{2}]",
                                        WebJobName, duration, message + (errors.Length == 0 ? String.Empty : " (with session errors)"));
            var text = String.Format(CultureInfo.InvariantCulture, "{1}{0}Run ID: {2}{0}Start time: {3}{0}End time:{4}{0}Output log file: {5}{6}",
                                     Environment.NewLine, GetTriggeredRunUrl(), WebJobRunId, DateTime.UtcNow - duration, DateTime.UtcNow, GetTriggeredLogUrl(),
                                     errors.Length == 0 ? String.Empty : String.Format("{0}Session Errors:{0}{1}", Environment.NewLine, errorsText));
            var mail = MailHelper.CreateSingleEmail(from, to, subject, text, null);

            using (var response = await SendGridClient.PostAsJsonAsync <SendGridMessage, string>(SendGridApiSendAddress, mail))
            {
                CommonEventSource.Log.SendSuccessMailStop(
                    description, response.ResponseMessage.StatusCode, response.ResponseMessage.Headers.ToString(), response.Content);
            }
        }
예제 #8
0
        public void WhenConcurrentEventsRaised()
        {
            var logger = MockEventSourceOutProc.Logger;
            EventTextFormatter  formatter = new EventTextFormatter();
            EventSourceSettings settings  = new EventSourceSettings("MockEventSourceOutProc", null, EventLevel.LogAlways);
            InMemorySink        sink      = new InMemorySink(formatter);

            SinkSettings sinkSettings = new SinkSettings("memorySink", sink, new List <EventSourceSettings>()
            {
                { settings }
            });
            List <SinkSettings> sinks = new List <SinkSettings>()
            {
                { sinkSettings }
            };
            TraceEventServiceConfiguration svcConfiguration = new TraceEventServiceConfiguration(sinks);

            TestScenario.WithConfiguration(
                svcConfiguration,
                () =>
            {
                sink.WaitSignalCondition = () => sink.EventWrittenCount == 100;
                for (int n = 0; n < 100; n++)
                {
                    logger.LogSomeMessage("some message" + n.ToString());
                }

                sink.WaitOnAsyncEvents.WaitOne(TimeSpan.FromSeconds(10));
            });

            StringAssert.Contains(sink.ToString(), "some message99");
        }
        public void WritesProcessIdAndThreadIdOnSummary()
        {
            var formatter = new EventTextFormatter(verbosityThreshold: EventLevel.Critical);

            using (var writer = new StringWriter())
            {
                var processId = 200;
                var threadId  = 300;

                formatter.WriteEvent(
                    new EventEntry(
                        Guid.NewGuid(),
                        0,
                        string.Empty,
                        new System.Collections.ObjectModel.ReadOnlyCollection <object>(new object[0]),
                        DateTimeOffset.MaxValue,
                        processId,
                        threadId,
                        Guid.Empty,
                        Guid.Empty,
                        new EventSourceSchemaReader().GetSchema(Logger).Values.First()),
                    writer);

                var message = writer.ToString();

                var processIdMatch = Regex.Match(message, "\\bProcessId : (?<id>\\d+)\\w?").Groups["id"].Value;
                var threadIdMatch  = Regex.Match(message, "\\bThreadId : (?<id>\\d+)\\w?").Groups["id"].Value;

                Assert.AreEqual(processId.ToString(), processIdMatch);
                Assert.AreEqual(threadId.ToString(), threadIdMatch);
            }
        }
        public void WritesNonEmptyActivityIds()
        {
            var formatter = new EventTextFormatter();

            using (var writer = new StringWriter())
            {
                var activityId        = Guid.NewGuid();
                var relatedActivityId = Guid.NewGuid();

                formatter.WriteEvent(
                    new EventEntry(
                        Guid.NewGuid(),
                        0,
                        string.Empty,
                        new System.Collections.ObjectModel.ReadOnlyCollection <object>(new object[0]),
                        DateTimeOffset.MaxValue,
                        200,
                        300,
                        activityId,
                        relatedActivityId,
                        new EventSourceSchemaReader().GetSchema(Logger).Values.First()),
                    writer);

                var message = writer.ToString();

                var activityIdMatch        = Regex.Match(message, "\\bActivityId : (?<id>[-A-Fa-f0-9]+)\\w?").Groups["id"].Value;
                var relatedActivityIdMatch = Regex.Match(message, "\\bRelatedActivityId : (?<id>[-A-Fa-f0-9]+)\\w?").Groups["id"].Value;

                Assert.AreEqual(activityId.ToString(), activityIdMatch);
                Assert.AreEqual(relatedActivityId.ToString(), relatedActivityIdMatch);
            }
        }
예제 #11
0
 public void SetUp()
 {
     AppDomain.CurrentDomain.SetData("APPBASE", Environment.CurrentDirectory);
     this.fileName           = Path.ChangeExtension(Guid.NewGuid().ToString("N"), ".log");
     this.eventTextFormatter = new EventTextFormatter(EventTextFormatter.DashSeparator);
     this.listener           = new ObservableEventListener();
 }
예제 #12
0
        public void WhenThreadId()
        {
            var validConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["valid"].ConnectionString;

            DatabaseHelper.CleanLoggingDB(validConnectionString);
            var logger = MockEventSourceOutProcEnum.Logger;
            EventTextFormatter formatter = new EventTextFormatter();

            System.Data.DataTable eventsDataTable = null;
            var subject = new EventEntrySubject();

            subject.LogToSqlDatabase("testInstance", validConnectionString, "Traces", bufferingCount: 1);
            EventSourceSettings settings     = new EventSourceSettings("MockEventSourceOutProcEnum", null, EventLevel.LogAlways);
            SinkSettings        sinkSettings = new SinkSettings("sqlDBsink", subject, new List <EventSourceSettings>()
            {
                { settings }
            });
            List <SinkSettings> sinks = new List <SinkSettings>()
            {
                { sinkSettings }
            };
            TraceEventServiceConfiguration svcConfiguration = new TraceEventServiceConfiguration(sinks);

            TestScenario.WithConfiguration(
                svcConfiguration,
                () =>
            {
                logger.SaveExpenseStarted(Guid.NewGuid());

                eventsDataTable = DatabaseHelper.PollUntilEventsAreWritten(validConnectionString, 1);
            });

            Assert.AreEqual(1, eventsDataTable.Rows.Count);
            Assert.AreEqual(ThreadHelper.GetCurrentUnManagedThreadId(), Convert.ToInt32(eventsDataTable.Rows[0]["ThreadId"]));
        }
예제 #13
0
        public override bool OnStart()
        {
            digest_event_log_listener.EnableEvents(Log, EventLevel.LogAlways,
                                                   AzureDigestEventSource.Keywords.Perf | AzureDigestEventSource.Keywords.Diagnostic);
            EventTextFormatter formatter = new EventTextFormatter()
            {
                VerbosityThreshold = EventLevel.Error
            };

            digest_event_log_listener.LogToFlatFile("Overlord.Digest.Azure.log", formatter, true);
            storage_event_log_listener.EnableEvents(AzureStorageEventSource.Log, EventLevel.LogAlways,
                                                    AzureStorageEventSource.Keywords.Perf | AzureStorageEventSource.Keywords.Diagnostic);
            storage_event_log_listener.LogToFlatFile("Overlord.Storage.Azure.log", formatter, true);
            // Set the maximum number of concurrent connections
            jss.Converters.Add(new GuidConverter());
            ServicePointManager.DefaultConnectionLimit = 12;

            // For information on handling configuration changes
            // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.

            bool result = base.OnStart();

            Trace.TraceInformation("Overlord.Digest.Azure has been started");

            return(result);
        }
예제 #14
0
        public void WritingNullEntryThrows()
        {
            var formatter = new EventTextFormatter();

            using (var writer = new StringWriter())
            {
                formatter.WriteEvent(null, writer);
            }
        }
        public void TwoCollectorsSameEventSource()
        {
            var validConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["valid"].ConnectionString;

            DatabaseHelper.CleanLoggingDB(validConnectionString);
            var logger = MockEventSourceOutProc.Logger;
            EventTextFormatter  formatter = new EventTextFormatter();
            EventSourceSettings settings  = new EventSourceSettings("MockEventSourceOutProc", null, EventLevel.LogAlways);

            var subject = new EventEntrySubject();

            subject.LogToSqlDatabase("testInstance", validConnectionString, "Traces", TimeSpan.FromSeconds(1), 1);
            SinkSettings sinkSettings = new SinkSettings("dbSink", subject, new List <EventSourceSettings>()
            {
                { settings }
            });

            var subject2 = new EventEntrySubject();

            subject2.LogToSqlDatabase("testInstance", validConnectionString, "Traces", TimeSpan.FromSeconds(1), 1);
            SinkSettings sinkSettings2 = new SinkSettings("dbSink2", subject2, new List <EventSourceSettings>()
            {
                { settings }
            });

            System.Data.DataTable eventsDataTable = null;
            List <SinkSettings>   sinks           = new List <SinkSettings>()
            {
                sinkSettings, sinkSettings2
            };
            TraceEventServiceConfiguration svcConfiguration = new TraceEventServiceConfiguration(sinks);

            using (TraceEventService collector = new TraceEventService(svcConfiguration))
                using (TraceEventService collector2 = new TraceEventService(svcConfiguration))
                {
                    collector.Start();
                    collector2.Start();
                    try
                    {
                        for (int n = 0; n < 10; n++)
                        {
                            logger.LogSomeMessage("some message" + n.ToString());
                        }

                        eventsDataTable = DatabaseHelper.PollUntilEventsAreWritten(validConnectionString, 20);
                    }
                    finally
                    {
                        collector.Stop();
                        collector2.Stop();
                    }
                }

            Assert.AreEqual(20, eventsDataTable.Rows.Count);
            StringAssert.Contains(eventsDataTable.Rows[0]["payload"].ToString(), "some message");
        }
예제 #16
0
        public AzureStorageIngestTests()
        {
            EventTextFormatter formatter = new EventTextFormatter()
            {
                VerbosityThreshold = EventLevel.Error
            };

            storage_event_log_listener.EnableEvents(AzureStorageEventSource.Log, EventLevel.LogAlways,
                                                    AzureStorageEventSource.Keywords.Perf | AzureStorageEventSource.Keywords.Diagnostic);
            storage_event_log_listener.LogToFlatFile("Overlord.Storage.Azure.log", formatter, true);
        }
예제 #17
0
        static void Main(string[] args)
        {
            if (args.Length < 5)
            {
                Console.WriteLine("Mamemaki.Slab.BigQuery.PlayGround.exe <projectId> <datasetId> <tableId> <serviceAccountEmail> <privateKeyFile>");
                return;
            }
            var projectId           = args[0];
            var datasetId           = args[1];
            var tableId             = args[2];
            var serviceAccountEmail = args[3];
            var privateKeyFile      = args[4];
            var tableSchemaFile     = args[5];

            using (var listenerConsole = new ObservableEventListener())
                using (var listener = new ObservableEventListener())
                {
                    var formatterConsole = new EventTextFormatter(
                        "+=========================================+");

                    // Setup listener for debug
                    listenerConsole.EnableEvents(SemanticLoggingEventSource.Log, EventLevel.LogAlways);
                    listenerConsole.EnableEvents(BigQuerySinkEventSource.Log, EventLevel.LogAlways);
                    listenerConsole.LogToConsole(formatterConsole);

                    // Setup listener for playgrond
                    listener.EnableEvents(PlayGroundEventSource.Log, EventLevel.LogAlways);
                    listener.LogToConsole(formatterConsole);
                    listener.LogToBigQuery(
                        projectId: projectId,
                        datasetId: datasetId,
                        tableId: tableId,
                        authMethod: "private_key",
                        serviceAccountEmail: serviceAccountEmail,
                        privateKeyFile: privateKeyFile,
                        privateKeyPassphrase: "notasecret",
                        autoCreateTable: true,
                        tableSchemaFile: tableSchemaFile,
                        insertIdFieldName: "%uuid%",
                        bufferingInterval: TimeSpan.FromSeconds(1),
                        bufferingCount: 3,
                        bufferingFlushAllTimeout: Constants.DefaultBufferingFlushAllTimeout,
                        maxBufferSize: 30000);

                    PlayGroundEventSource.Log.Trace("start");
                    InsertRows(3);
                    Thread.Sleep(1);
                    InsertRows(3);
                    PlayGroundEventSource.Log.Trace("end");
                }

            Console.WriteLine("Press any key to exit");
            Console.ReadLine();
        }
예제 #18
0
        public static void Configure()
        {
            var formatter = new EventTextFormatter()
            {
                VerbosityThreshold = EventLevel.Error
            };
            ObservableEventListener http_event_log_listener = new ObservableEventListener();

            http_event_log_listener.EnableEvents(HttpEventSource.Log, EventLevel.LogAlways,
                                                 HttpEventSource.Keywords.Perf | HttpEventSource.Keywords.Diagnostic);
            http_event_log_listener.LogToFlatFile("Overlord.Http.log", formatter, true);
        }
예제 #19
0
 protected override void Given()
 {
     colorMapper = new MockDefaultConsoleColorMapper();
     mockConsole = new MockConsoleOutput();
     formatter   = new EventTextFormatter(EventTextFormatter.DashSeparator)
     {
         VerbosityThreshold = EventLevel.Informational
     };
     listener = new ObservableEventListener();
     listener.LogToConsole(formatter, colorMapper);
     listener.EnableEvents(TestEventSource.Log, EventLevel.LogAlways);
 }
        public void WritesEventData()
        {
            var formatter = new EventTextFormatter(EventTextFormatter.DashSeparator)
            {
                VerbosityThreshold = EventLevel.Critical
            };

            using (var listener = new InMemoryEventListener(formatter))
            {
                listener.EnableEvents(Logger, EventLevel.LogAlways, Keywords.All);

                Logger.Failure("Failure message");
                formatter.VerbosityThreshold = EventLevel.Informational;
                Logger.DBQueryStart("select * from table");
                Logger.DBQueryStop();
                Logger.LogColor(MyColor.Red);

                var entries = Regex.Split(listener.ToString(), formatter.Header + "\r\n").Where(c => !string.IsNullOrWhiteSpace(c)).ToList();

                StringAssert.Contains(entries[0], "EventId : 1");
                StringAssert.Contains(entries[0], "Level : Error");
                StringAssert.Contains(entries[0], "Payload : [message : Failure message]");
                StringAssert.Contains(Regex.Replace(entries[1], @"\s+", string.Empty), Regex.Replace(
                                          @"EventId : 5
Keywords : 2
Level : Informational
Message : 
Opcode : Start
Task : 2
Version : 0
Payload : [sqlQuery : select * from table]", @"\s+", string.Empty));

                StringAssert.Contains(Regex.Replace(entries[2], @"\s+", string.Empty), Regex.Replace(
                                          @"EventId : 6
Keywords : 2
Level : Informational
Message : 
Opcode : Stop
Task : 2
Version : 0
Payload :", @"\s+", string.Empty));

                StringAssert.Contains(Regex.Replace(entries[3], @"\s+", string.Empty), Regex.Replace(
                                          @"EventId : 8
Keywords : None
Level : Informational
Message : 
Opcode : Info
Task : 65526
Version : 0
Payload : [color : 0]", @"\s+", string.Empty));
            }
        }
예제 #21
0
        public void WritesCustomFooter()
        {
            var formatter = new EventTextFormatter(null, "___footer___");

            using (var listener = new InMemoryEventListener(formatter))
            {
                listener.EnableEvents(Logger, EventLevel.LogAlways, EventKeywords.All);

                Logger.Startup();

                Assert.IsTrue(listener.ToString().Contains(formatter.Footer));
            }
        }
예제 #22
0
        public void WritesCustomHeader()
        {
            var formatter = new EventTextFormatter("*** header ***");

            using (var listener = new InMemoryEventListener(formatter))
            {
                listener.EnableEvents(Logger, EventLevel.LogAlways, EventKeywords.All);

                Logger.DBQueryStart("select * from table");

                Assert.IsTrue(listener.ToString().Contains(formatter.Header));
            }
        }
예제 #23
0
        public void WhenTwoEventSourcesAreUsedInOneCollector()
        {
            var validConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["valid"].ConnectionString;

            DatabaseHelper.CleanLoggingDB(validConnectionString);
            var logger  = MockEventSourceOutProc.Logger;
            var logger2 = MockEventSourceOutProc2.Logger;
            EventTextFormatter  formatter = new EventTextFormatter();
            EventSourceSettings settings  = new EventSourceSettings("MockEventSourceOutProc", null, EventLevel.LogAlways);
            EventSourceSettings settings2 = new EventSourceSettings("MockEventSourceOutProc2", null, EventLevel.LogAlways);

            var subject = new EventEntrySubject();

            subject.LogToSqlDatabase("testInstance", validConnectionString, "Traces", TimeSpan.FromSeconds(1), 1);
            SinkSettings sinkSettings = new SinkSettings("dbSink", subject, new List <EventSourceSettings>()
            {
                settings, settings2
            });
            List <SinkSettings> sinks = new List <SinkSettings>()
            {
                sinkSettings
            };
            TraceEventServiceConfiguration svcConfiguration = new TraceEventServiceConfiguration(sinks);

            TestScenario.WithConfiguration(
                svcConfiguration,
                () =>
            {
                for (int n = 0; n < 200; n++)
                {
                    logger.LogSomeMessage("some message" + n.ToString());
                }

                var eventsDataTable = DatabaseHelper.PollUntilEventsAreWritten(validConnectionString, 200);
                Assert.AreEqual(200, eventsDataTable.Rows.Count);
                StringAssert.Contains(eventsDataTable.Rows[0]["payload"].ToString(), "some message");

                DatabaseHelper.CleanLoggingDB(validConnectionString);

                for (int n = 0; n < 200; n++)
                {
                    logger2.LogSomeMessage("some message" + n.ToString());
                }

                var eventsDataTable2 = DatabaseHelper.PollUntilEventsAreWritten(validConnectionString, 200);
                Assert.AreEqual(200, eventsDataTable2.Rows.Count);
                StringAssert.Contains(eventsDataTable2.Rows[0]["payload"].ToString(), "some message");
            });
        }
예제 #24
0
        public void WritesCustomHeaderAndFooter()
        {
            var formatter = new EventTextFormatter("---header---", "___footer___");

            using (var listener = new InMemoryEventListener(formatter))
            {
                listener.EnableEvents(Logger, EventLevel.LogAlways, EventKeywords.All);

                Logger.Startup();

                var contents = listener.ToString();
                Assert.IsTrue(contents.Contains(formatter.Header));
                Assert.IsTrue(contents.Contains(formatter.Footer));
            }
        }
예제 #25
0
        public void WhenSourceEnabledAndNotSpecifyingKeyword()
        {
            var consoleOutputInterceptor = new MockConsoleOutputInterceptor();
            var formatter = new EventTextFormatter(EventTextFormatter.DashSeparator);

            using (var eventListener = new ObservableEventListener())
            {
                eventListener.LogToConsole();
                eventListener.EnableEvents(MockConsoleListenerEventSource.Logger, EventLevel.LogAlways);
                MockConsoleListenerEventSource.Logger.InfoWithKeywordDiagnostic("Info with keyword Diagnostic");
            }

            var entry = Regex.Split(consoleOutputInterceptor.Ouput, formatter.Header).Where(c => !string.IsNullOrWhiteSpace(c)).SingleOrDefault();

            Assert.IsNull(entry);
        }
예제 #26
0
        public void IncludesTaskName()
        {
            var formatter = new EventTextFormatter(EventTextFormatter.DashSeparator, verbosityThreshold: EventLevel.LogAlways);

            using (var listener = new InMemoryEventListener(formatter))
            {
                listener.EnableEvents(Logger, EventLevel.LogAlways, EventKeywords.All);

                Logger.DBQueryStart("select * from table");
                Logger.WithOpcodeAndNoTaskSpecfied(4);

                var entries = Regex.Split(listener.ToString(), formatter.Header + "\r\n").Where(c => !string.IsNullOrWhiteSpace(c)).ToList();
                StringAssert.Matches(entries[0], new Regex("EventName : .*DBQuery"));
                StringAssert.Matches(entries[1], new Regex("Task : .*None"));
            }
        }
예제 #27
0
        public void ShouldWriteTimestampWithDefaultDateTimeFormat()
        {
            var formatter = new EventTextFormatter(EventTextFormatter.DashSeparator);

            using (var listener = new InMemoryEventListener(formatter))
            {
                listener.EnableEvents(Logger, EventLevel.LogAlways, EventKeywords.All);
                Logger.Failure("error");

                var      logged = listener.ToString();
                var      lookup = "Timestamp : ";
                var      ts     = logged.Substring(logged.IndexOf(lookup) + lookup.Length).Replace("\r\n", "");
                DateTime dt;
                Assert.IsTrue(DateTime.TryParseExact(ts, formatter.DateTimeFormat ?? EventEntry.DefaultDateTimeFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt));
            }
        }
예제 #28
0
        public void WhenHighEventIds()
        {
            var consoleOutputInterceptor = new MockConsoleOutputInterceptor();
            var formatter = new EventTextFormatter(EventTextFormatter.DashSeparator);
            var logger    = MockHighEventIdEventSource.HigheventIdLogger;

            using (var eventListener = new ObservableEventListener())
            {
                eventListener.LogToConsole();
                eventListener.EnableEvents(logger, EventLevel.Warning);
                logger.Warning();
            }

            var entry = Regex.Split(consoleOutputInterceptor.Ouput, formatter.Header).Where(c => !string.IsNullOrWhiteSpace(c)).SingleOrDefault();

            Assert.IsNotNull(entry);
        }
예제 #29
0
파일: Api.cs 프로젝트: allisterb/Overlord
        static Api()
        {
            var formatter = new EventTextFormatter()
            {
                VerbosityThreshold = EventLevel.Error
            };
            ObservableEventListener api_event_log_listener = new ObservableEventListener();

            api_event_log_listener.EnableEvents(ApiEventSource.Log, EventLevel.LogAlways,
                                                ApiEventSource.Keywords.Perf | ApiEventSource.Keywords.Diagnostic);
            api_event_log_listener.LogToFlatFile("Overlord.Core.Api.log", formatter, true);
            ObservableEventListener storage_event_log_listener = new ObservableEventListener();

            storage_event_log_listener.EnableEvents(AzureStorageEventSource.Log, EventLevel.LogAlways,
                                                    AzureStorageEventSource.Keywords.Perf | AzureStorageEventSource.Keywords.Diagnostic);
            storage_event_log_listener.LogToFlatFile("Overlord.Storage.Azure.log", formatter, true);
        }
        public void FlatFileSomeFilteredSomeNot()
        {
            var logger = MockEventSourceOutProc.Logger;
            EventTextFormatter formatter = new EventTextFormatter(EventTextFormatter.DashSeparator);
            var fileName = "FlatFileAllFiltered.log";

            File.Delete(fileName);

            EventSourceSettings settings = new EventSourceSettings("MockEventSourceOutProc", null, EventLevel.Error);
            var subject = new EventEntrySubject();

            subject.LogToFlatFile(fileName, formatter);

            SinkSettings sinkSettings = new SinkSettings("flatFileSink", subject, new List <EventSourceSettings>()
            {
                { settings }
            });
            List <SinkSettings> sinks = new List <SinkSettings>()
            {
                { sinkSettings }
            };
            TraceEventServiceConfiguration svcConfiguration = new TraceEventServiceConfiguration(sinks);
            IEnumerable <string>           entries          = null;

            using (TraceEventService collector = new TraceEventService(svcConfiguration))
            {
                collector.Start();
                try
                {
                    for (int n = 0; n < 200; n++)
                    {
                        logger.LogSomeMessage("some message " + n.ToString());
                        logger.Critical("some error " + n.ToString());
                    }
                    entries = FlatFileHelper.PollUntilTextEventsAreWritten(fileName, 200, EventTextFormatter.DashSeparator);
                }
                finally
                {
                    collector.Stop();
                }
            }

            Assert.AreEqual(200, entries.Count());
            StringAssert.Contains(entries.First(), "some error 0");
            StringAssert.Contains(entries.Last(), "some error 199");
        }