2016-07-01 3 views
1

Semantic Logging Application Blockを使用してログをAzure Table Storageに保存しようとしています。セットアップ:リスナーにAzureシンクを設定しようとすると、例外の原因を追跡する方法

ObservableEventListener listener1 = new ObservableEventListener(); 
var conString = 
    $"DefaultEndpointsProtocol={CloudStorageAccount.DevelopmentStorageAccount.TableEndpoint.Scheme};" + 
    $"AccountName={CloudStorageAccount.DevelopmentStorageAccount.Credentials.AccountName};" + 
    $"AccountKey={Convert.ToBase64String(CloudStorageAccount.DevelopmentStorageAccount.Credentials.ExportKey())}"; 

listener1.LogToWindowsAzureTable(// <---- EXCEPTION HERE 
     instanceName: "instName", 
     connectionString: conString); 

私は奇妙な例外取得しています:スロー

例外: 'System.MissingMethodException' をMicrosoft.Practices.EnterpriseLibrary.SemanticLogging.WindowsAzure.dllに

追加情報:メソッドが見つかりません: 'Void Microsoft.WindowsAzure.Storage.Table.CloudTableClient.set_RetryPolicy(Microsoft.WindowsAzure.Storage.RetryPolicies.IRetryPolicy)'。

私は実際のアカウントで同じ問題があります。パッケージのバージョン(それらのすべてがNuGetからです):

  • EnterpriseLibrary.SemanticLogging - 2.0.1406.1
  • EnterpriseLibrary.SemanticLogging.WindowsAzure - 2.0.1406.1
  • WindowsAzure.Storage - 7.0.0

例外の原因を追跡するにはどうすればよいですか? Googleでは見つからない方法については何も言及していません。あなたのマシンでテストするプロジェクトはhereです。

+0

Azureのテーブルにログをアップロードすることは素敵であることに注意してください、しかし、アプリケーションの洞察にアップロードする(AI )はさらに優れています:https://github.com/fidmor89/SLAB_AppInsights。標準またはプレミアム層を使用している場合は、テーブルストレージへの連続エクスポートを設定して、それを無料で入手できます。 –

答えて

3

SLABは、バージョン4.0.0.0(sourceを)で非推奨として削除されたストレージクライアントライブラリ3.0.2.0(source)と、クライアント上のRetry Policies(例えばCloudTableClient)の設定に依存しているため、このエラーを取得している理由は、それ以降のバージョン(どちらがどちらか分かりません)。

バージョン7.xのストレージクライアントライブラリを使用しているため、RetryPolicyをCloudTableClientに設定する方法は存在しないため、このエラーが発生しています。

+0

7.0.0で廃止されました(まだ6.2.2プレビューにありました) –

1

Guaravのように、SLABは非常に古いバージョンのMicrosoft.WindowsAzure.Storageに対して作られています。問題はthis lineで、client.DefaultRequestOptions.RetryPolicyの代わりにclient.RetryPolicyを使用しています。私はNuGetパッケージを更新して変更しようとしましたが、いくつかのテストを中断させたようで、修正するのは簡単ではありませんでした。また、4.6サポートのように見えます:https://github.com/mspnp/semantic-logging/issues/64

ここには不具合があります:https://github.com/mspnp/semantic-logging/issues/81ですが、私は何かがすぐに(これまであったとしても)いつでも起こるとは思っていません。おそらくAzureが世話をするTrace Listener(Table Storage uploadを含む)にログをリダイレクトする簡単なシンクを書くことになるでしょう。ここ

EDITは(まだテストしていない)のコードです:

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); 
    } 
} 
関連する問題