Using Windows Azure SDK 1.4 you can use the following code in Web Role or Worker Role to Add :

 

        public override bool OnStart()
{
// Set the maximum number of concurrent connections
ServicePointManager.DefaultConnectionLimit = 12;
//We need to get default initial configuration
var config = DiagnosticMonitor.GetDefaultInitialConfiguration();
//Windows Azure Logs. Table: WADLogsTable
config.Logs.ScheduledTransferLogLevelFilter = LogLevel.Verbose;
config.Logs.ScheduledTransferPeriod = TimeSpan.FromSeconds(5);
//Performance counters. Table: WADPerformanceCountersTable
config.PerformanceCounters.DataSources.Add(
new PerformanceCounterConfiguration
{
CounterSpecifier = @"\Processor(*)\*",
SampleRate = TimeSpan.FromSeconds(1)
}
);
config.PerformanceCounters.ScheduledTransferPeriod = TimeSpan.FromSeconds(5);
//You can add more performance counter using the link below:
// - http://blogs.msdn.com/b/avkashchauhan/archive/2011/04/01/list-of-performance-counters-for-windows-azure-web-roles.aspx?wa=wsignin1.0
//Windows Azure Diagnostic Infrastructure Logs. Table: WADDiagnosticInfrastructureLogsTable
config.DiagnosticInfrastructureLogs.ScheduledTransferLogLevelFilter = LogLevel.Verbose;
config.DiagnosticInfrastructureLogs.ScheduledTransferPeriod = TimeSpan.FromSeconds(5);

//Windows Event Logs. Table: WADWindowsEventLogsTable
config.WindowsEventLog.ScheduledTransferLogLevelFilter = LogLevel.Verbose;
config.WindowsEventLog.DataSources.Add("Application!*");
config.WindowsEventLog.DataSources.Add("System!*");
config.WindowsEventLog.ScheduledTransferPeriod = TimeSpan.FromSeconds(5);
//Crash Dumps. Blob. Container: wad-crash-dumps
CrashDumps.EnableCollection(true);
//Custom Error Logs
var localResource = RoleEnvironment.GetLocalResource("ErrorStorageFolder"); // ErrorStroageFolder is the Local Storage you will have to add with You Role
var directoryConfiguration = new DirectoryConfiguration
{
Container = "wad-custom-log-container",
DirectoryQuotaInMB = localResource.MaximumSizeInMegabytes,
Path = localResource.RootPath
};
config.Directories.DataSources.Add(directoryConfiguration);
config.Directories.BufferQuotaInMB = 1024;
config.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(1);//for crash dumps and custom error log
// Based on above code, you can verify that you have setup dump data transfer time to 1 minutes.

//Start with new configuration
DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", config);
Thread.Sleep(10000);
//Adding 10 seconds time so crash dumps can be uploaded. You can find a suitable time depend on your test to upload the crash dumps.
return base.OnStart();
}

 

 

Verification  on Windows Azure VM:

You can verify that infrastructure log are created in Windows Azure VM at location below:

C:\Resources\directory\<Deployment_ID>.<Role_Name>.<StorageName>\

The crash dumps will be located at folder bellow:

C:\Resources\directory\<Deployment_ID>.<Role_Name>.<StorageName> \CrashDumps

You can also look at the Monitoring Host configuration file for the role and verify the transfer time is set as below:

<Directories>

      <BufferQuotaInMB>1</BufferQuotaInMB>

      <ScheduledTransferPeriodInMinutes>1</ScheduledTransferPeriodInMinutes>

      <Subscriptions>

        <DirectoryConfiguration>

          <Path>********** Role Path **************** </Path>

          <Container>wad-crash-dumps</Container>

          <DirectoryQuotaInMB>1024</DirectoryQuotaInMB>

        </DirectoryConfiguration>

      </Subscriptions>

    </Directories>


Further Analysis:

Once the crash will occur the role will die and upload will be scheduled during next role startup. Based on above, the crash dump will be uploaded next time your role starts up, and it will take some time for the uploading. If your role only runs for a short time after the crash, then Diagnostics may  not have enough time for the uploading. That's why we have added Thread.Sleep() in the above code to give enough time to upload the crash dumps when created.


Here is how it works:


1-       Role starts and then crash happens due to any reason during start

2-       The crash dump was created immediately

3-       This crash cause application to exit

4-       When App Agent starts the role again the crash dump is being uploaded however if time is very less to upload and the upload action is broken and crash dumps cannot be uploaded

5-       Adding some sleep time in the same thread solves this crash dump upload issue