Exemple #1
0
        public void ValidateTelemetryExceptionData(LogLevel logLevel)
        {
            var logRecords = new List <LogRecord>();

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

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

            var ex = new Exception("Message");

            logger.Log(logLevel, ex, "Message");

            var exceptionData = new TelemetryExceptionData(2, logRecords[0]);

            Assert.Equal(2, exceptionData.Version);
            Assert.Equal(LogsHelper.GetSeverityLevel(logLevel), exceptionData.SeverityLevel);
            Assert.Empty(exceptionData.Properties);
            Assert.Empty(exceptionData.Measurements);
            Assert.Equal(typeof(Exception).FullName + " at UnknownMethod", exceptionData.ProblemId);
            Assert.Equal(1, exceptionData.Exceptions.Count);
            Assert.Equal("Message", exceptionData.Exceptions[0].Message);
            Assert.Null(exceptionData.Exceptions[0].Stack);
            Assert.Equal(ex.GetHashCode(), exceptionData.Exceptions[0].Id);
            Assert.Empty(exceptionData.Exceptions[0].ParsedStack);
            Assert.True(exceptionData.Exceptions[0].HasFullStack);
        }
Exemple #2
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);
 }
Exemple #3
0
 public void ValidateSeverityLevels()
 {
     Assert.Equal(SeverityLevel.Critical, LogsHelper.GetSeverityLevel(LogLevel.Critical));
     Assert.Equal(SeverityLevel.Error, LogsHelper.GetSeverityLevel(LogLevel.Error));
     Assert.Equal(SeverityLevel.Warning, LogsHelper.GetSeverityLevel(LogLevel.Warning));
     Assert.Equal(SeverityLevel.Information, LogsHelper.GetSeverityLevel(LogLevel.Information));
     Assert.Equal(SeverityLevel.Verbose, LogsHelper.GetSeverityLevel(LogLevel.Debug));
     Assert.Equal(SeverityLevel.Verbose, LogsHelper.GetSeverityLevel(LogLevel.Trace));
 }
Exemple #4
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;
        }
        public void ValidateMessageData(LogLevel logLevel)
        {
            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 <MessageDataTests>();

            logger.Log(logLevel, "Log Message");

            var messageData = new MessageData(2, logRecords[0]);

            Assert.Equal("Log Message", messageData.Message);
            Assert.Equal(LogsHelper.GetSeverityLevel(logLevel), messageData.SeverityLevel);
            Assert.Empty(messageData.Properties);
            Assert.Empty(messageData.Measurements);
        }
Exemple #6
0
 public MessageData(int version, LogRecord logRecord) : base(version)
 {
     Message       = logRecord.State.ToString();
     SeverityLevel = LogsHelper.GetSeverityLevel(logRecord.LogLevel);
 }