11

単純なものを見逃したことは確かですが、Azureで動作する単純なTrace.WriteLineを取得できません。

私が取ったステップ:

Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionStringがAzureストレージアカウントに設定されました

モジュール診断をサービス定義ファイルにインポートします。

Web config

  <system.diagnostics>
    <switches>
      <add name="logLevel" value="4" />
    </switches>
    <trace autoflush="false" indentsize="4">
      <listeners>
        <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
          name="AzureDiagnostics">
        </add>
      </listeners>
    </trace>

  </system.diagnostics>

WebRole.cs

public class WebRole : RoleEntryPoint
{
    public override bool OnStart()
    {


        String wadConnectionString = "Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString";

        CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue(wadConnectionString));

        RoleInstanceDiagnosticManager roleInstanceDiagnosticManager =
                cloudStorageAccount.CreateRoleInstanceDiagnosticManager(
                RoleEnvironment.DeploymentId,
                RoleEnvironment.CurrentRoleInstance.Role.Name,
                RoleEnvironment.CurrentRoleInstance.Id);

        DiagnosticMonitorConfiguration diagnosticMonitorConfiguration =
            roleInstanceDiagnosticManager.GetCurrentConfiguration();

        diagnosticMonitorConfiguration.Directories.ScheduledTransferPeriod =
               TimeSpan.FromMinutes(5d);

        diagnosticMonitorConfiguration.Logs.ScheduledTransferPeriod =
               TimeSpan.FromMinutes(1d);

        diagnosticMonitorConfiguration.Logs.ScheduledTransferLogLevelFilter = LogLevel.Verbose;

        roleInstanceDiagnosticManager.SetCurrentConfiguration
              (diagnosticMonitorConfiguration);

        Trace.WriteLine("This is the message");
        Debug.Write("This is the debug message");
        System.Diagnostics.Trace.TraceError("message2");
        System.Diagnostics.Trace.TraceWarning("message warning");
        System.Diagnostics.Trace.TraceInformation("message warning");
        Trace.Flush();
        return base.OnStart();

    }
}

ソリューションはリリースとしてコンパイルされます。

ストレージアカウントのオブジェクトを表示すると、WADDirectoriesTableというテーブルと、vsdeploy、wad-control-container、was-iis-logfilesという3つのblobが作成されていることがわかります。

私のトレース情報のように見えるものはありません。

どうもありがとう

4

3 に答える 3

4

私はこれと同じ問題を抱えていました。ここでソリューションを使用していました。あなたが見逃しているのは、ログが転送される予定の場所だと思います(この場合は、LocalResource パスを使用します)。

public override bool OnStart()
{
    Trace.WriteLine("Entering OnStart...");

    var traceResource = RoleEnvironment.GetLocalResource("TraceFiles");
    var config = DiagnosticMonitor.GetDefaultInitialConfiguration();

    // *** this part specifies where transfers should be stored ***
    config.Directories.DataSources.Add(
        new DirectoryConfiguration
        {
            Path = traceResource.RootPath,
            Container = "traces",
            DirectoryQuotaInMB = 100
        });
    config.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(10);

    DiagnosticMonitor.Start("DiagnosticsConnectionString", config);

    return base.OnStart();
}  

これを機能させるには、LocalStorage ノードを作成して、これらのファイルを に保存する必要がありますServiceDefinition.csdef

<LocalStorage name="TraceFiles" sizeInMB="100" cleanOnRoleRecycle="true" />

また、これらのファイルは、ストレージ アカウントでは使用できず、VM 自体のローカル リソース フォルダーで使用できるため、アクセスできる場所に転送する方法が必要です。ローカル リソース ファイルをダウンロードできる Web ページでそれを実現します。

于 2011-05-13T17:01:32.283 に答える
3

よし、並べた!

この投稿はすべてを説明しています:

これは、Azure SDK 1.3 以降では、IIS で完全に実行されているため、 webrole.cs ファイル内のリスナーが Web アプリの残りの部分とは異なるためです。トレース アイテムを Web アプリ自体に追加すると、テーブル WADLogsTable にトレース情報が表示されます。

于 2011-05-13T17:16:00.830 に答える
2

私自身も同様の問題を抱えていましたが、上記の投稿では答えられませんでした。DiagnosticsをSDK1.6で動作させるために行った手順の概要をブログに投稿しました。

WebRoles用のSDK1.6を使用したWindowsAzureDiagnostics

于 2011-12-08T20:38:14.523 に答える