我可以在VM上使用AzureTableTraceListener或AzureBlobTraceListener吗?

时间:2017-05-11 19:44:41

标签: .net azure listener tracing azure-diagnostics

我在Azure(IAAS)的VM上安装了Web应用程序。

我是否可以使用其中一个Azure诊断侦听器,例如以下

之一
  • AzureDriveTraceListener
  • AzureTableTraceListener
  • AzureBlobTraceListener

或将写入Azure表存储或Azure中任何其他存储的任何其他侦听器,我可以使用Azure门户访问? 我如何配置连接字符串?

1 个答案:

答案 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));
                }
            }
        }