LogServer.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Diagnostics;
  5. using System.Net.Http;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using DefaultNamespace.LogTool;
  9. using UnityEngine;
  10. using Utility;
  11. public class LogServer : Singleton<LogServer>
  12. {
  13. public string playerID;
  14. public string gameName = "Editor";
  15. public string version;
  16. private string deviceModel;
  17. private string operatingSystem;
  18. public void Init(string gameName)
  19. {
  20. this.gameName = gameName;
  21. version = Application.version;
  22. deviceModel = SystemInfo.deviceName + " " + SystemInfo.deviceModel;
  23. operatingSystem = SystemInfo.operatingSystem;
  24. }
  25. public void UpLog(Exception exception)
  26. {
  27. try
  28. {
  29. LogServeData logServeData = new LogServeData();
  30. logServeData.hash = GetStackTraceHash(exception);
  31. logServeData.title = exception.Message;
  32. logServeData.content = exception.StackTrace;
  33. logServeData.LogType = 1;
  34. logServeData.gameName = gameName;
  35. // logServeData.time = (long)(CombatTimerManager.Instance.TimeSinceStartUp() * 1000);
  36. logServeData.playerId = playerID;
  37. logServeData.v = version;
  38. logServeData.DeviceID = deviceModel;
  39. logServeData.operatingSystem = operatingSystem;
  40. UpdatToServer(logServeData);
  41. }
  42. catch (Exception e)
  43. {
  44. }
  45. }
  46. public void UpLog(string title, string messge)
  47. {
  48. try
  49. {
  50. LogServeData logServeData = new LogServeData();
  51. logServeData.hash = GetStackTraceHash(title, messge);
  52. logServeData.title = title;
  53. logServeData.content = messge;
  54. logServeData.LogType = 2;
  55. logServeData.gameName = gameName;
  56. // logServeData.time = (long)(CombatTimerManager.Instance.TimeSinceStartUp() * 1000);
  57. logServeData.playerId = playerID;
  58. logServeData.v = version;
  59. logServeData.DeviceID = deviceModel;
  60. logServeData.operatingSystem = operatingSystem;
  61. UpdatToServer(logServeData);
  62. }
  63. catch (Exception e)
  64. {
  65. }
  66. }
  67. private async Task UpdatToServer(LogServeData logServeData)
  68. {
  69. string json = LitJson.JsonMapper.ToJson(logServeData);
  70. byte[] logData = Encoding.UTF8.GetBytes(json);
  71. using var httpClient = new HttpClient();
  72. var content = new ByteArrayContent(logData);
  73. content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
  74. var response = await httpClient.PostAsync("http://139.155.99.185:5001/api/logserver/upload", content);
  75. if (response.IsSuccessStatusCode)
  76. {
  77. var result = await response.Content.ReadAsStringAsync();
  78. // UnityEngine.Debug.Log($"上传成功: {result}");
  79. }
  80. // else
  81. // {
  82. // UnityEngine.Debug.Log($"上传失败: {response.StatusCode}");
  83. // }
  84. }
  85. private string GetStackTraceHash(string title, string messge)
  86. {
  87. var sb = new StringBuilder();
  88. sb.Append(title);
  89. sb.Append(messge);
  90. return GetStackTraceHash(sb);
  91. }
  92. private string GetStackTraceHash(Exception ex)
  93. {
  94. var trace = new StackTrace(ex, true);
  95. var sb = new StringBuilder();
  96. foreach (var frame in trace.GetFrames() ?? Array.Empty<StackFrame>())
  97. {
  98. var method = frame.GetMethod();
  99. if (method?.DeclaringType != null)
  100. {
  101. sb.Append(method.DeclaringType.FullName)
  102. .Append(".")
  103. .Append(method.Name)
  104. .Append("()");
  105. }
  106. }
  107. return GetStackTraceHash(sb);
  108. }
  109. private string GetStackTraceHash(StringBuilder stringBuilder)
  110. {
  111. using var sha = System.Security.Cryptography.SHA1.Create();
  112. byte[] hash = sha.ComputeHash(Encoding.UTF8.GetBytes(stringBuilder.ToString()));
  113. return Convert.ToBase64String(hash);
  114. }
  115. }