public void StructuredTraceTemplateAndValues()
        {
            var structuredTrace = new StructuredTrace <StandardEventId>("structuredTraceTestSource");
            var listener        = structuredTrace.TraceSource.Listeners.OfType <TestTraceListener>().First();

            listener.MethodCallInformation.Clear();

            structuredTrace.Critical(StandardEventId.ConfigurationCriticalError, "c{a}", 1);

            var events = listener.MethodCallInformation;

            Assert.AreEqual(TraceEventType.Critical, events[0].EventType);
            Assert.AreEqual(9000, events[0].Id);
            var data = (IStructuredData)events[0].Data[0];

            Assert.AreEqual("c{a}", data["MessageTemplate"]);
            Assert.AreEqual(1, data["a"]);
        }
        public void StructuredTraceScopeMessage()
        {
            var structuredTrace = new StructuredTrace <StandardEventId>("structuredTraceTestSource");
            var listener        = structuredTrace.TraceSource.Listeners.OfType <TestTraceListener>().First();

            listener.MethodCallInformation.Clear();

            using (var scope = structuredTrace.BeginScope(new StructuredData("y{a}", 1)))
            {
                structuredTrace.Critical(StandardEventId.ConfigurationCriticalError, "x{b}", 2);
            }

            var events = listener.MethodCallInformation;

            Assert.AreEqual(TraceEventType.Critical, events[0].EventType);
            var data = (IStructuredData)events[0].Data[0];

            Assert.AreEqual("x{b}", data["MessageTemplate"]);
            Assert.AreEqual(2, data["b"]);
            var operation = events[0].LogicalOperationStack[0];

            Assert.AreEqual("y1", operation);
        }