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); }
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); }
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)); }
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); }
public MessageData(int version, LogRecord logRecord) : base(version) { Message = logRecord.State.ToString(); SeverityLevel = LogsHelper.GetSeverityLevel(logRecord.LogLevel); }