.net 在尝试为侦听器设置Azure接收器时,如何跟踪异常源
我正在尝试使用语义日志应用程序块将日志存储到Azure表存储中。设置: 我有一个奇怪的例外: 引发异常:Microsoft.Practices.EnterpriseLibrary.SemanticBlocking.WindowsAzure.dll中的“System.MissingMethodException” 其他信息:未找到方法:“作废Microsoft.WindowsAzure.Storage.Table.CloudTableClient.set\u RetryPolicyMicrosoft.WindowsAzure.Storage.RetryPolicys.IRetryPolicy” 我对真实账户也有同样的问题。软件包版本所有这些都来自NuGet: EnterpriseLibrary.semanticlocking-2.0.1406.1 EnterpriseLibrary.SemanticBlocking.WindowsAzure-2.0.1406.1 WindowsAzure.Storage-7.0.0.net 在尝试为侦听器设置Azure接收器时,如何跟踪异常源,.net,azure,azure-table-storage,semantic-logging,slab,.net,Azure,Azure Table Storage,Semantic Logging,Slab,我正在尝试使用语义日志应用程序块将日志存储到Azure表存储中。设置: 我有一个奇怪的例外: 引发异常:Microsoft.Practices.EnterpriseLibrary.SemanticBlocking.WindowsAzure.dll中的“System.MissingMethodException” 其他信息:未找到方法:“作废Microsoft.WindowsAzure.Storage.Table.CloudTableClient.set\u RetryPolicyMicrosof
如何跟踪异常的来源?谷歌并没有提到找不到的方法。要在您的计算机上测试的项目是。出现此错误的原因是SLAB依赖于存储客户端库3.0.2.0,并且在客户端CloudTableClient上设置重试策略。例如,在版本4.0.0.0中已弃用,在某些更高版本中已删除,但不确定是哪个版本
因为您使用的是7.x版的存储客户端库,在CloudTableClient上设置RetryPolicy的方法不存在,因此出现此错误。出现此错误的原因是,SLAB依赖于存储客户端库3.0.2.0,并且在客户端CloudTableClient上设置重试策略,例如,在版本4.0.0.0中被弃用,在某些更高版本中被删除确定是哪一个
因为您使用的是7.x版的存储客户端库,所以在CloudTableClient上设置RetryPolicy的方法不存在,因此您会遇到此错误。正如Guarav所说,SLAB是根据非常旧的Microsoft.WindowsAzure.storage版本构建的。问题是,使用client.RetryPolicy而不是client.DefaultRequestOptions.RetryPolicy。我试着更新NuGet软件包并对其进行更改,但它似乎破坏了一些测试,而且修复它们似乎并不简单。另外,似乎没有4.6支持: 这里有一个缺点:,但我怀疑它是否会很快发生任何事情。最后,我可能会编写一些简单的接收器,将日志重定向到Azure的跟踪侦听器,以便处理这些日志 编辑以下是尚未测试的代码:
public class SystemDiagnosticsTraceSink : IObserver<EventEntry>
{
public void OnNext(EventEntry entry)
{
if (entry == null) return;
using (var writer = new StringWriter())
{
new EventTextFormatter().WriteEvent(entry, writer);
var eventText = writer.ToString();
switch (entry.Schema.Level)
{
case EventLevel.LogAlways:
case EventLevel.Critical:
case EventLevel.Error:
Trace.TraceError(eventText);
return;
case EventLevel.Warning:
Trace.TraceWarning(eventText);
return;
case EventLevel.Informational:
case EventLevel.Verbose:
Trace.TraceInformation(eventText);
return;
default:
Trace.TraceError("Unknown event level: " + entry.Schema.Level);
Trace.TraceInformation(eventText);
return;
}
}
}
public void OnError(Exception error)
{} //you might want to do something here
public void OnCompleted()
{} //nothing to do
}
和扩展类:
public static class SystemDiagnosticsTraceSinkExtensions
{
public static SinkSubscription<SystemDiagnosticsTraceSink> LogToSystemDiagnosticsTrace
(this IObservable<EventEntry> eventStream)
{
if (eventStream == null) throw new ArgumentNullException(nameof(eventStream));
var sink = new SystemDiagnosticsTraceSink();
return new SinkSubscription<SystemDiagnosticsTraceSink>(
eventStream.Subscribe(sink), sink);
}
}
正如Guarav所说,SLAB是根据非常旧的Microsoft.WindowsAzure.Storage版本构建的。问题是,使用client.RetryPolicy而不是client.DefaultRequestOptions.RetryPolicy。我试着更新NuGet软件包并对其进行更改,但它似乎破坏了一些测试,而且修复它们似乎并不简单。另外,似乎没有4.6支持: 这里有一个缺点:,但我怀疑它是否会很快发生任何事情。最后,我可能会编写一些简单的接收器,将日志重定向到Azure的跟踪侦听器,以便处理这些日志 编辑以下是尚未测试的代码:
public class SystemDiagnosticsTraceSink : IObserver<EventEntry>
{
public void OnNext(EventEntry entry)
{
if (entry == null) return;
using (var writer = new StringWriter())
{
new EventTextFormatter().WriteEvent(entry, writer);
var eventText = writer.ToString();
switch (entry.Schema.Level)
{
case EventLevel.LogAlways:
case EventLevel.Critical:
case EventLevel.Error:
Trace.TraceError(eventText);
return;
case EventLevel.Warning:
Trace.TraceWarning(eventText);
return;
case EventLevel.Informational:
case EventLevel.Verbose:
Trace.TraceInformation(eventText);
return;
default:
Trace.TraceError("Unknown event level: " + entry.Schema.Level);
Trace.TraceInformation(eventText);
return;
}
}
}
public void OnError(Exception error)
{} //you might want to do something here
public void OnCompleted()
{} //nothing to do
}
和扩展类:
public static class SystemDiagnosticsTraceSinkExtensions
{
public static SinkSubscription<SystemDiagnosticsTraceSink> LogToSystemDiagnosticsTrace
(this IObservable<EventEntry> eventStream)
{
if (eventStream == null) throw new ArgumentNullException(nameof(eventStream));
var sink = new SystemDiagnosticsTraceSink();
return new SinkSubscription<SystemDiagnosticsTraceSink>(
eventStream.Subscribe(sink), sink);
}
}
它在7.0.0中被弃用在6.2.2-PreviewWit在7.0.0中被弃用在6.2.2-previewNote将日志上载到Azure表很好,但将它们上载到Application Insights AI则更好:。如果您有标准或高级层,那么您可以配置连续导出到表存储并免费获取…请注意,将日志上载到Azure表很好,但将其上载到Application Insights AI则更好:。如果您有标准或高级存储层,那么您可以配置连续导出到表存储,并免费获得该存储层。。。