我可以在虚拟机上使用AzureTableTraceListener或AzureBlobTraceListener吗?
问题描述:
我在Azure(IAAS)的虚拟机上安装了Web应用程序。我可以在虚拟机上使用AzureTableTraceListener或AzureBlobTraceListener吗?
我可以使用Azure诊断侦听器之一,如以下
- AzureDriveTraceListener
- AzureTableTraceListener
- AzureBlobTraceListener
或任何其他监听器将写入Azure中的一个表格存储或Azure中的任何其他存储,我可以使用Azure Portal访问? 如何配置连接字符串?
答
将Microsoft.WindowsAzure.WebSites.Diagnostics反编译后,我发现我们无法通过添加一些代码来直接设置连接字符串。
该软件包用于Web应用程序服务。启用Web应用程序诊断日志后,应用程序服务将自动添加一些环境变量。 Microsoft.WindowsAzure.WebSites.Diagnostics将读取这些变量以连接到Azure存储和日志消息到文件。
所以,如果你想使用这个库来追踪错误,我建议你可以尝试设置所有的环境变量作为Web服务。但这太复杂了。
这里是一个解决方法,我建议你可以使用一些日志错误包来将错误记录到天蓝色的存储中,如NLog或其他东西。它包含extension for azure table storage。
这里是在Microsoft.WindowsAzure.WebSites.Diagnostics一些源代码,你会发现它使用EnvironmentVariable阅读设置:
BaseTraceListener:
protected string GetConfigFile()
{
string environmentVariable = Environment.GetEnvironmentVariable("DIAGNOSTICS_LOGGINGSETTINGSFILE");
string environmentVariable2 = Environment.GetEnvironmentVariable("HOME");
if (environmentVariable == null)
{
return Path.GetFullPath(Path.Combine(environmentVariable2, "site\\diagnostics\\settings.json"));
}
if (Path.IsPathRooted(environmentVariable))
{
return environmentVariable;
}
return Path.GetFullPath(Path.Combine(environmentVariable2, "site", "wwwroot", environmentVariable));
}
AzureblobTrancelistener:
protected override void RefreshConfig()
{
try
{
Config config = base.ReadConfigFile();
base.Enabled = config.AzureBlobEnabled;
base.TraceLevel = config.AzureBlobTraceLevel;
}
catch (Exception innerException)
{
base.Enabled = false;
base.LogException(new ApplicationException(string.Format(Resources.TraceListenerIsDisabledByInvalidConfig, base.GetType().Name), innerException));
}
if (base.Enabled)
{
try
{
string environmentVariable = Environment.GetEnvironmentVariable("DIAGNOSTICS_AZUREBLOBCONTAINERSASURL");
if (string.IsNullOrWhiteSpace(environmentVariable))
{
throw new InvalidOperationException(string.Format(Resources.CloudStorageSasUrlNotSpecified, "DIAGNOSTICS_AZUREBLOBCONTAINERSASURL"));
}
this.blobContainer = new CloudBlobContainer(new Uri(environmentVariable));
}
catch (Exception innerException2)
{
base.Enabled = false;
this.blobContainer = null;
base.LogException(new ApplicationException(string.Format(Resources.TraceListenerIsDisabled, base.GetType().Name), innerException2));
}
}
}