/// <summary> /// Logs an event with a stack trace and exception. /// </summary> /// <param name="level">The level.</param> /// <param name="message">The message.</param> /// <param name="stackTrace">The stack trace.</param> /// <param name="exception">The exception.</param> private void LogEvent(UserReportEventLevel level, string message, string stackTrace, Exception exception) { lock (this.events) { UserReportEvent userReportEvent = new UserReportEvent(); userReportEvent.Level = level; userReportEvent.Message = message; userReportEvent.FrameNumber = this.frameNumber; userReportEvent.StackTrace = stackTrace; userReportEvent.Timestamp = DateTime.UtcNow; if (exception != null) { userReportEvent.Exception = new SerializableException(exception); } this.events.Add(userReportEvent); } }
/// <inheritdoc cref="IUserReportingPlatform"/> public void Update(UserReportingClient client) { // Log Messages lock (this.logMessages) { foreach (LogMessage logMessage in this.logMessages) { UserReportEventLevel eventLevel = UserReportEventLevel.Info; if (logMessage.LogType == LogType.Warning) { eventLevel = UserReportEventLevel.Warning; } else if (logMessage.LogType == LogType.Error) { eventLevel = UserReportEventLevel.Error; } else if (logMessage.LogType == LogType.Exception) { eventLevel = UserReportEventLevel.Error; } else if (logMessage.LogType == LogType.Assert) { eventLevel = UserReportEventLevel.Error; } if (client.IsConnectedToLogger) { client.LogEvent(eventLevel, logMessage.LogString, logMessage.StackTrace); } } this.logMessages.Clear(); } // Metrics if (client.Configuration.MetricsGatheringMode == MetricsGatheringMode.Automatic) { // Sample Automatic Metrics this.SampleAutomaticMetrics(client); // Profiler Samplers foreach (ProfilerSampler profilerSampler in this.profilerSamplers) { client.SampleMetric(profilerSampler.Name, profilerSampler.GetValue()); } } // Post Operations int postOperationIndex = 0; while (postOperationIndex < this.postOperations.Count) { UnityUserReportingPlatform.PostOperation postOperation = this.postOperations[postOperationIndex]; if (postOperation.WebRequest.isDone) { bool isError = postOperation.WebRequest.error != null && postOperation.WebRequest.responseCode != 200; if (isError) { string errorMessage = string.Format("UnityUserReportingPlatform.Post: {0} {1}", postOperation.WebRequest.responseCode, postOperation.WebRequest.error); UnityEngine.Debug.Log(errorMessage); client.LogEvent(UserReportEventLevel.Error, errorMessage); } postOperation.ProgressCallback(1, 1); postOperation.Callback(!isError, postOperation.WebRequest.downloadHandler.data); this.postOperations.Remove(postOperation); } else { postOperation.ProgressCallback(postOperation.WebRequest.uploadProgress, postOperation.WebRequest.downloadProgress); postOperationIndex++; } } }
/// <summary> /// Logs an event. /// </summary> /// <param name="level">The level.</param> /// <param name="message">The message.</param> /// <param name="stackTrace">The stack trace.</param> public void LogEvent(UserReportEventLevel level, string message, string stackTrace) { this.LogEvent(level, message, stackTrace, null); }