PclLogger.vb 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. Public Class PclLogger
  2. Inherits FileLogger
  3. ''' <inheritdoc/>
  4. Public Overrides Function Format(Text As String, Level As LogLevel, FilePath As String, Ex As Exception) As String
  5. Text = MyBase.Format(Text, Level, FilePath, Ex)
  6. Text = FilterUserName(FilterAccessToken(Text, "*"c), "*"c)
  7. Return Text
  8. End Function
  9. ''' <inheritdoc/>
  10. Public Overrides Sub HandleBehavior(RawMessage As String, FormattedMessage As String, Behavior As LogBehavior, Ex As Exception)
  11. If IsProgramEnding Then Return
  12. MyBase.HandleBehavior(RawMessage, FormattedMessage, Behavior, Ex)
  13. Dim BriefText = If(Ex Is Nothing, RawMessage, If(RawMessage Is Nothing, "", $"{RawMessage}:") & Ex.GetDisplay(False))
  14. BriefText = FilterUserName(FilterAccessToken(BriefText, "*"c), "*"c)
  15. Dim DetailText = If(Ex Is Nothing, RawMessage, If(RawMessage Is Nothing, "", $"{RawMessage}:") & Ex.GetDisplay(True))
  16. DetailText = FilterUserName(FilterAccessToken(DetailText, "*"c), "*"c)
  17. Select Case Behavior
  18. Case LogBehavior.None
  19. '啥也不干
  20. Case LogBehavior.ToastIfDebug
  21. If BuildType = BuildTypes.Debug OrElse ModeDebug Then Hint("[调试模式] " & BriefText, HintType.Blue, False)
  22. Case LogBehavior.Toast
  23. Hint(BriefText, HintType.Red, False)
  24. Case LogBehavior.Alert
  25. MyMsgBox(DetailText, "错误", IsWarn:=True)
  26. Case LogBehavior.AlertThenFeedback
  27. If PageSetupSystem.IsLauncherNewest Then
  28. If MyMsgBox(DetailText & vbCrLf & vbCrLf & "是否反馈此问题?如果不反馈,这个问题可能永远无法得到解决!", "错误", "反馈", "取消", IsWarn:=True) = 1 Then Feedback(False, True)
  29. Else
  30. MyMsgBox(DetailText & vbCrLf & vbCrLf & "将 PCL 更新至最新版或许可以解决这个问题……", "错误", IsWarn:=True)
  31. End If
  32. Case LogBehavior.AlertThenCrash
  33. Static FirstTrigger As Boolean = True
  34. If FirstTrigger Then
  35. '首次触发
  36. FirstTrigger = False
  37. If PageSetupSystem.IsLauncherNewest Then
  38. If MsgBox(DetailText & vbCrLf & vbCrLf & "是否反馈此问题?如果不反馈,这个问题可能永远无法得到解决!", MsgBoxStyle.Critical + MsgBoxStyle.YesNo, "错误") = MsgBoxResult.Yes Then Feedback(False, True)
  39. Else
  40. MsgBox(DetailText & vbCrLf & vbCrLf & "将 PCL 更新至最新版或许可以解决这个问题……", MsgBoxStyle.Critical, "错误")
  41. End If
  42. Else
  43. '多次触发,直接使程序崩溃(这通常代表着在其他线程循环触发严重异常)
  44. Thread.Sleep(2000)
  45. End If
  46. FormMain.EndProgramForce(ProcessReturnValues.Exception)
  47. End Select
  48. '遥测
  49. If Behavior >= LogBehavior.Toast Then Telemetry("错误日志", "Exception", DetailText)
  50. End Sub
  51. End Class