LogRow.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace MediaBrowser.Common.Logging
  5. {
  6. public struct LogRow
  7. {
  8. const string TimePattern = "h:mm:ss.fff tt d/M/yyyy";
  9. public LogSeverity Severity { get; set; }
  10. public string Message { get; set; }
  11. public string Category { get; set; }
  12. public int ThreadId { get; set; }
  13. public string ThreadName { get; set; }
  14. public DateTime Time { get; set; }
  15. public string ShortMessage
  16. {
  17. get
  18. {
  19. var message = Message;
  20. if (message.Length > 120)
  21. {
  22. message = Message.Substring(0, 120).Replace(Environment.NewLine, " ") + " ... ";
  23. }
  24. return message;
  25. }
  26. }
  27. public string FullDescription
  28. {
  29. get
  30. {
  31. StringBuilder sb = new StringBuilder();
  32. sb.AppendFormat("Time: {0}", Time);
  33. sb.AppendLine();
  34. sb.AppendFormat("Thread Id: {0} {1}", ThreadId, ThreadName);
  35. sb.AppendLine();
  36. sb.AppendLine(Message);
  37. return sb.ToString();
  38. }
  39. }
  40. public override string ToString()
  41. {
  42. StringBuilder builder = new StringBuilder();
  43. builder.Append(Time.ToString(TimePattern))
  44. .Append(" , ")
  45. .Append(Enum.GetName(typeof(LogSeverity), Severity))
  46. .Append(" , ")
  47. .Append(Encode(Message))
  48. .Append(" , ")
  49. .Append(Encode(Category))
  50. .Append(" , ")
  51. .Append(ThreadId)
  52. .Append(" , ")
  53. .Append(Encode(ThreadName));
  54. return builder.ToString();
  55. }
  56. private string Encode(string str)
  57. {
  58. return (str ?? "").Replace(",", ",,").Replace(Environment.NewLine, " [n] ");
  59. }
  60. public static LogRow FromString(string message)
  61. {
  62. var split = splitString(message);
  63. return new LogRow()
  64. {
  65. Time = DateTime.ParseExact(split[0], TimePattern, null),
  66. Severity = (LogSeverity)Enum.Parse(typeof(LogSeverity), split[1]),
  67. Message = split[2],
  68. Category = split[3],
  69. ThreadId = int.Parse(split[4]),
  70. ThreadName = split[5]
  71. };
  72. }
  73. static string[] splitString(string message)
  74. {
  75. List<string> items = new List<string>();
  76. bool gotComma = false;
  77. StringBuilder currentItem = new StringBuilder();
  78. foreach (var chr in message)
  79. {
  80. if (chr == ',' && gotComma)
  81. {
  82. gotComma = false;
  83. currentItem.Append(',');
  84. }
  85. else if (chr == ',')
  86. {
  87. gotComma = true;
  88. }
  89. else if (gotComma)
  90. {
  91. items.Add(currentItem.ToString().Replace(" [n] ", Environment.NewLine).Trim());
  92. currentItem = new StringBuilder();
  93. gotComma = false;
  94. }
  95. else
  96. {
  97. currentItem.Append(chr);
  98. }
  99. }
  100. items.Add(currentItem.ToString().Replace("[n]", Environment.NewLine).Trim());
  101. return items.ToArray();
  102. }
  103. }
  104. }