public static TestLoggerBackend.LogEntry ReadLogEntry(XElement node) { if (!node.Name.LocalName.Equals("LogEntry")) { throw new InternalErrorException(); } TestLoggerBackend.EntryKind kind; if (!Enum.TryParse(node.Attribute("Kind").Value, out kind)) { throw new InternalErrorException(); } var text = node.Attribute("Text").Value; var logLevel = int.Parse(node.Attribute("LogLevel").Value); Exception exception = null; var error = node.Element("Error"); if (error != null) { var errorMessage = error.Attribute("Text").Value; var stackTrace = error.Attribute("StackTrace"); exception = new SavedException(errorMessage, stackTrace != null ? stackTrace.Value : null); } var category = node.Attribute("Category")?.Value; return(new TestLoggerBackend.LogEntry(kind, category, logLevel, text, exception)); }
private static void SaveException(IFolder exceptionLogFolder, string title, string message, string stackTrace, string innerMessage, string innerStackTrace, Action <SavedException> onExceptionSaved) { exceptionLogFolder.CreateIfNecessary(); var fileContents = "Title:\r\n" + title + "\r\nMessage:\r\n" + message + "\r\nStack trace:\r\n" + stackTrace + "\r\nInner message:\r\n" + innerMessage + "\r\nInner stack trace:\r\n" + innerStackTrace; var md5 = MD5.Create(); var inputBytes = Encoding.UTF8.GetBytes(fileContents); var hash = md5.ComputeHash(inputBytes); var sb = new StringBuilder(); foreach (var t in hash) { sb.Append(t.ToString("X2")); } var exceptionName = "Exception-" + sb; var fileName = exceptionLogFolder.FullName + '\\' + exceptionName + ".txt"; File.WriteAllText(fileName, fileContents); var savedException = new SavedException { ExceptionName = exceptionName, FileContents = fileContents, FileFullName = fileName }; onExceptionSaved(savedException); }