我在Azure(IAAS)的VM上安装了Web应用程序。
我是否可以使用其中一个Azure诊断侦听器,例如以下
之一或将写入Azure表存储或Azure中任何其他存储的任何其他侦听器,我可以使用Azure门户访问? 我如何配置连接字符串?
答案 0 :(得分:1)
在反编译Microsoft.WindowsAzure.WebSites.Diagnostics之后,我发现我们无法通过添加一些代码来直接设置连接字符串。
此软件包用于Web应用程序服务。启用Web应用程序诊断日志后,应用程序服务将自动添加一些环境变量。 Microsoft.WindowsAzure.WebSites.Diagnostics将读取这些变量以连接到文件的azure存储和日志消息。
因此,如果您想使用此库来跟踪错误,我建议您尝试将所有环境变量设置为Web服务。但这太复杂了。
这是一种解决方法,我建议你可以使用一些日志错误包将错误记录到azure存储,例如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));
}
}
}