我正在使用最新的Sentry/NLog包(如下面所示),但由于某种原因,我的错误开始记录到NLog,而不是登录到Sentry。
--我可以看到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之后,我在NLog内部日志文件中收到了一个System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel.错误!我能够通过将System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;添加到Global.asax.cs文件来解决这个问题!问题解决了!谢谢你,罗尔夫·克里斯滕森!
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.发布于 2020-06-24 08:59:48
如果它只是静默地未能将错误发送到Sentry,而内部日志中没有条目,我将检查您的哨兵DSN,然后双倍和三次检查它:)确保在查找sentry中的错误时,您正在查看正确的项目,并且将环境下拉设置为所有环境。如果您100%确信DSN是正确的,请尝试在nlog标记中添加atribute throwExceptions="true“。这可能会带来一些新线索。
发布于 2022-11-29 18:51:33
在我的例子中,它没有将异常事件发送给Sentry,因为它被现有的日志服务提供程序吞没了(可能是默认的)。修复方法是更新Program.cs文件以显式使用NLog,然后删除appsettings.json中的默认日志对象。
在这里找到了修复程序:https://programmingcsharp.com/nlog-net-core/
https://stackoverflow.com/questions/62331587
复制相似问题