コード例 #1
0
        public void PropertiesContainFieldsFromStructuredLogs()
        {
            var logRecords = new List <LogRecord>();

            using var loggerFactory = LoggerFactory.Create(builder =>
            {
                builder.AddOpenTelemetry(options =>
                {
                    options.AddInMemoryExporter(logRecords);
                });
                builder.AddFilter(typeof(LogsHelperTests).FullName, LogLevel.Trace);
            });

            var logger = loggerFactory.CreateLogger <LogsHelperTests>();

            string log = "Hello from {name} {price}.";

            logger.LogInformation(log, "tomato", 2.99);

            var properties = new ChangeTrackingDictionary <string, string>();

            LogsHelper.GetMessageAndSetProperties(logRecords[0], properties);

            Assert.True(properties.TryGetValue("name", out string name));
            Assert.Equal("tomato", name);
            Assert.True(properties.TryGetValue("price", out string price));
            Assert.Equal("2.99", price);
        }
コード例 #2
0
        public void PropertiesContainEventIdAndEventNameIfSetOnLog()
        {
            var logRecords = new List <LogRecord>();

            using var loggerFactory = LoggerFactory.Create(builder =>
            {
                builder.AddOpenTelemetry(options =>
                {
                    options.ParseStateValues = true;
                    options.AddInMemoryExporter(logRecords);
                });
                builder.AddFilter(typeof(LogsHelperTests).FullName, LogLevel.Trace);
            });

            var logger = loggerFactory.CreateLogger <LogsHelperTests>();

            EventId id = new EventId(1, "TestEvent");

            logger.LogInformation(id, "Log Information");

            var properties = new ChangeTrackingDictionary <string, string>();

            LogsHelper.GetMessageAndSetProperties(logRecords[0], properties);

            Assert.True(properties.TryGetValue("EventId", out string eventId));
            Assert.Equal("1", eventId);
            Assert.True(properties.TryGetValue("EventName", out string eventName));
            Assert.Equal("TestEvent", eventName);
        }
コード例 #3
0
        public void MessageIsSetToOriginalFormatWhenIncludeFormattedMessageIsNotSet()
        {
            var logRecords = new List <LogRecord>();

            using var loggerFactory = LoggerFactory.Create(builder =>
            {
                builder.AddOpenTelemetry(options =>
                {
                    options.AddInMemoryExporter(logRecords);
                });
                builder.AddFilter(typeof(LogsHelperTests).FullName, LogLevel.Trace);
            });

            var logger = loggerFactory.CreateLogger <LogsHelperTests>();

            string log = "Hello from {name} {price}.";

            logger.LogInformation(log, "tomato", 2.99);

            var properties = new ChangeTrackingDictionary <string, string>();
            var message    = LogsHelper.GetMessageAndSetProperties(logRecords[0], properties);

            Assert.Equal(log, message);
            Assert.False(properties.ContainsKey("OriginalFormat"));
            Assert.True(properties.TryGetValue("name", out string name));
            Assert.Equal("tomato", name);
            Assert.True(properties.TryGetValue("price", out string price));
            Assert.Equal("2.99", price);
        }
コード例 #4
0
 public MessageData(int version, LogRecord logRecord) : base(version)
 {
     Properties    = new ChangeTrackingDictionary <string, string>();
     Measurements  = new ChangeTrackingDictionary <string, double>();
     Message       = LogsHelper.GetMessageAndSetProperties(logRecord, Properties).Truncate(SchemaConstants.MessageData_Message_MaxLength);
     SeverityLevel = LogsHelper.GetSeverityLevel(logRecord.LogLevel);
 }
コード例 #5
0
        public TelemetryExceptionData(int version, LogRecord logRecord) : base(version)
        {
            Properties   = new ChangeTrackingDictionary <string, string>();
            Measurements = new ChangeTrackingDictionary <string, double>();

            var message = LogsHelper.GetMessageAndSetProperties(logRecord, Properties);

            SeverityLevel = LogsHelper.GetSeverityLevel(logRecord.LogLevel);
            ProblemId     = LogsHelper.GetProblemId(logRecord.Exception).Truncate(SchemaConstants.ExceptionData_ProblemId_MaxLength);

            // collect the set of exceptions detail info from the passed in exception
            List <TelemetryExceptionDetails> exceptions = new List <TelemetryExceptionDetails>();

            ConvertExceptionTree(logRecord.Exception, message, null, exceptions);

            // trim if we have too many, also add a custom exception to let the user know we're trimmed
            if (exceptions.Count > MaxExceptionCountToSave)
            {
                // create our "message" exception.
                InnerExceptionCountExceededException countExceededException =
                    new InnerExceptionCountExceededException(
                        string.Format(
                            CultureInfo.InvariantCulture,
                            "The number of inner exceptions was {0} which is larger than {1}, the maximum number allowed during transmission. All but the first {1} have been dropped.",
                            exceptions.Count,
                            MaxExceptionCountToSave));

                // remove all but the first N exceptions
                exceptions.RemoveRange(MaxExceptionCountToSave,
                                       exceptions.Count - MaxExceptionCountToSave);

                // we'll add our new exception and parent it to the root exception (first one in the list)
                exceptions.Add(new TelemetryExceptionDetails(countExceededException, countExceededException.Message, exceptions[0]));
            }

            Exceptions = exceptions;
        }