如何从Asp Net Core WebApi将我的日志存储到Azure表存储?

时间:2016-11-03 14:37:54

标签: c# azure nlog azure-table-storage

我有使用.Net Framework 4.6的ASP .Net Core WebApi应用程序。我正在使用NLog进行日志记录。我想登录Azure表存储。为此,我正在使用 AzureTableStorageNLogTarget和NLogExtensions.Logging Nuget Packages。

AzureTableStorageNLogTarget的最新稳定版本是1.0.9但是当我使用它时我得到以下异常:

Could not load type 'Microsoft.Azure.CloudConfigurationManager' from assembly 

所以我使用的是1.0.8版本。

现在我得到以下异常:

Error Error initializing target 'AzureTableStorage Target[AzureTableStorageTarget]'. Exception: System.ArgumentNullException: Value cannot be null.
Parameter name: connectionString

谷歌搜索错误告诉我,它无法找到Azure表存储连接字符串,我不明白为什么。

这是我的NLog.Config

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      internalLogLevel="Warn"
      internalLogFile="c:\temp\internal-nlog.txt">
  <extensions>
    <add assembly="NLog.Extensions.AzureTableStorage"/>
  </extensions>
  <!-- define various log targets -->
  <targets>
    <!-- write logs to file -->
    <target xsi:type="File" name="allfile" fileName="c:\temp\WebAPI-nlog-all-${shortdate}.log"
                layout="${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|${message} ${exception}" />


    <target xsi:type="File" name="ownFile-web" fileName="c:\temp\WebAPI-nlog-own-${shortdate}.log"
             layout="${longdate}|${event-properties:item=EventId.Id}|${logger}|${uppercase:${level}}|  ${message} ${exception}" />


    <target xsi:type="AzureTableStorage"
            name="AzureTableStorageTarget"
            ConnectionStringKey="AzureStorageConnectionString"
            TableName="LogTable" />
    <target xsi:type="Null" name="blackhole" />
  </targets>

  <rules>
    <!--All logs, including from Microsoft-->
    <logger name="*" minlevel="Trace" writeTo="allfile" />

    <!--Skip Microsoft logs and so log only own logs-->
    <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
    <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
    <logger name="*" minlevel="Trace" writeTo="AzureTableStorageTarget" />
  </rules>
</nlog>

我的Appsetting.json:

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "AppSettings": {
    "AzureStorageConnectionString": "DefaultEndpointsProtocol=https;AccountName=sqdev01storage;AccountKey=<key redacted>"
  }

}

示例项目可在Git上找到:https://github.com/pankyog/NLogToAzureTable/tree/Re1

1 个答案:

答案 0 :(得分:1)

  

无法加载类型&#39; Microsoft.Azure.CloudConfigurationManager&#39;从汇编

据我所知,AzureTableStorageNLogTarget(版本1.0.9)中的引用名为NLog.Extensions.AzureTableStorage.dll,引用Microsoft.WindowsAzure.ConfigurationManager版本3.0.0.0。同时,WindowsAzure.Storage(4.3.0)引用Microsoft.WindowsAzure.ConfigurationManager版本1.8.0。

注意:Microsoft.WindowsAzure.ConfigurationManager 3.0.0.0中,CloudConfigurationManager的命名空间已从Microsoft.WindowsAzure移至Microsoft.Azure。

您可以参考WindowsAzure.Storage的最新稳定版本,并引用Microsoft.WindowsAzure.ConfigurationManager 3.0.0.0来解决此错误。

  

错误初始化目标&#39; AzureTableStorage目标[AzureTableStorageTarget]&#39;时出错。异常:System.ArgumentNullException:值不能为null。   参数名称:connectionString

NLog Azure Table Storage Target中所述:

[[connection-string-key]]是应用设置或云服务配置文件中Azure存储帐户连接字符串设置的关键。

在ASP.NET Core中,设置已移至appsettings.json。您可以手动添加App.config文件并配置Azure存储帐户连接字符串设置以进行开发。此外,您可以通过Azure门户在Web应用程序中配置appsettings,以便在将Web应用程序部署到Azure时覆盖存储帐户连接字符串。

1