2011-05-13 93 views
11

我確定我錯過了一些簡單的事情,但我無法簡單地使用Trace.WriteLine來處理Azure。Windows Azure跟蹤日誌不起作用

步驟我已經採取了:

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的blob。

沒有看起來像我的跟蹤信息。

非常感謝

回答

4

我有同樣的問題。我正在使用解決方案here。我相信你缺少的一塊就是日誌scheduled to be transferred位置(在這種情況下,使用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" /> 

,你需要有一種方法將這些文件轉移到一些地方,你可以得到他們,因爲他們不是在存儲賬戶中可用,但對本地資源文件夾虛擬機本身。我通過一個允許我下載本地資源文件的網頁來實現這一目標。

+0

不是我確切的問題或解決方案,但很有趣,我很可能用這個東西。非常感謝這篇文章! – Max 2011-05-13 17:17:50