我正在使用最新的 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.
