1

我正在使用最新的 Sentry/NLog 包(如下所示),但由于某种原因,我的错误开始记录到 NLog 而不是 Sentry。

我可以看到哨兵正在被初始化,但它从来没有记录任何东西!同时,错误被毫无问题地记录到 NLog 中。

这些是我的相关包:

  <package id="Newtonsoft.Json" version="12.0.3" targetFramework="net472" />
  <package id="NLog" version="4.7.0" targetFramework="net472" />
  <package id="Sentry" version="2.1.1" targetFramework="net472" />
  <package id="Sentry.NLog" version="2.1.1" targetFramework="net472" />
  <package id="Sentry.PlatformAbstractions" version="1.1.0" targetFramework="net472" />
  <package id="Sentry.Protocol" version="2.1.1" targetFramework="net472" />
  <package id="System.Collections.Immutable" version="1.5.0" targetFramework="net472" />

这是我的 NLog 配置文件(出于安全原因,我删除了我的 DSN):

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      throwConfigExceptions="true">
  <extensions>
    <add assembly="Sentry.NLog" />
  </extensions>
  <targets async="true">
    <target name="SentryLogger" xsi:type="Sentry"
      dsn="{removed for security reasons...}"
      environment="${appsetting:item=Environment:default=Staging}"
      InitializeSdk="true"
      layout="${message}"
      breadcrumbLayout="${message}"
      minimumBreadcrumbLevel="Debug"
      minimumEventLevel="Error">
      <options
            attachStacktrace="true"
            sendDefaultPii="true"
            shutdownTimeoutSeconds="5"
            includeEventDataOnBreadcrumbs="true" />
    </target>
    
    <target name="default" xsi:type="File"
      fileName="${basedir}/logs/${shortdate}.log"
      archiveFileName="${basedir}/logs/archive-log/app-log.{#}.txt"
      archiveEvery="Day"
      archiveNumbering="Rolling"
      maxArchiveFiles="30" />
  </targets>
  <rules>
    <logger name="*" writeTo="default" />
    <logger name="*" minlevel="Error" writeTo="SentryLogger" />
  </rules>
</nlog>

NLog 能工作但 Sentry 不能工作有什么原因吗?我在同一解决方案中有其他项目可以正确记录到 Sentry 和 NLog,但不是这个!

在此处输入图像描述

编辑:我检查了 NLog 内部日志,它似乎正在写入 Sentry,但它从未出现在 Sentry 的 UI 中。内部日志文件中似乎也没有任何错误。

2020-06-11 16:53:31.5829 Trace AsyncWrapper(Name=default): Throttled timer scheduled
2020-06-11 16:53:31.5829 Trace AsyncWrapper(Name=SentryLogger): Throttled timer scheduled
2020-06-11 16:53:31.5920 Trace AsyncWrapper(Name=SentryLogger): Writing 1 events (Timer)
2020-06-11 16:53:31.5920 Trace AsyncWrapper(Name=default): Writing 1 events (Timer)

编辑:通过 Nuget 将 Sentry.NLog 包从 2.1.1 更新到 2.1.4 后,我System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel.在 NLog 内部日志文件中收到错误消息!我能够通过添加System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;到我的 Global.asax.cs 文件来解决这个问题!问题解决了!谢谢@Rolf Kristensen!

2020-06-25 16:50:55.8958 Debug Event queued up.
2020-06-25 16:50:55.9198 Debug Configuring the scope.
2020-06-25 16:50:56.2788 Debug Event 1338f238cd484cc7a0a288133306718c in-flight to Sentry. #1 in queue.
2020-06-25 16:50:56.4968 Error Error while processing event 1338f238cd484cc7a0a288133306718c: System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel.
   at System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext& context)
   at System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult ar)
   --- End of inner exception stack trace ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Sentry.Internal.Http.GzipBufferedRequestBodyHandler.<SendAsync>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Sentry.Internal.Http.RetryAfterHandler.<SendAsync>d__8.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Sentry.Internal.Http.HttpTransport.<CaptureEventAsync>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at Sentry.Internal.BackgroundWorker.<WorkerAsync>d__18.MoveNext(). #1 in queue.
4

1 回答 1

2

如果它只是默默地无法向 Sentry 发送错误,而内部日志中没有条目,我会检查您的 sentry DSN,然后对其进行双重和三重检查:) 在 Sentry 中查找错误时,请确保您正在查看正确的项目,并且环境下拉菜单设置为所有环境。如果您 100% 确定 DSN 是正确的,请尝试将属性 throwExceptions="true" 添加到 nlog 标记。这或许会带来一些新的线索。

于 2020-06-24T08:59:48.310 回答