2016-11-03 1 views
1

У меня есть приложение ASP .Net Core WebApi, которое использует .Net Framework 4.6. Я использую NLog для ведения журнала. Я хочу войти в Azure Table Storage. Для этого я использую AzureTableStorageNLogTarget и NLogExtensions.Logging Nuget Packages.Как сохранить свои журналы в Azure Table Store из Asp Net Core WebApi?

Последний стабильный релиз для 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 Table Storage ConnectionString, я не понимаю, почему.

Вот мой 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

Не удалось загрузить тип «Microsoft.Azure.CloudConfigurationManager» из сборки

Как я знаю, ссылка называется NLog.Extensions.AzureTableStorage.dll в AzureTableStorageNLogTarget (версия 1.0.9), которая ссылается на версию 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.

Ошибка Ошибка инициализации цели 'AzureTableStorage Target [AzureTableStorageTarget]'. Исключение: System.ArgumentNullException: значение не может быть нулевым. Имя параметра: ConnectionString

Как уже упоминалось в NLog Azure Table Storage Target:

[[connection-string-key]] является ключом настройки строки подключения Azure Storage Account в конфигурационном файле настройки приложения или Cloud Service.

В ASP.NET Core параметры были перенесены в appsettings.json. Вы можете вручную добавить файл App.config и настроить строку строки подключения учетной записи Azure для разработки. Кроме того, вы можете настроить настройки приложения в своем веб-приложении через Azure Portal, чтобы переопределить строку подключения учетной записи хранилища, когда ваше веб-приложение развернуто на Azure.

1

+0

Я уже определил строку подключения в разделе AppSettings в appsettings.json файл. Зачем нужен другой файл App.Config. Также, если я создаю новый файл app.config, мне нужно обновить код, чтобы прочитать его? Потому что я не видел никакого кода в Startup.cs, чтобы прочитать это. – Pankaj

+0

Я выполнил [NLog Azure Table Storage Target] (https://github.com/harouny/NLog.Extensions.AzureTableStorage), чтобы настроить строку подключения учетной записи Azure Storage. И я мог бы воспроизвести вашу проблему при настройке строки подключения в файле appsettings.json. После того, как я добавил дополнительный файл app.config, я мог бы работать с ним, как и ожидалось, на моей стороне, не обновляя ни одного кода для чтения настроек. Я предположил, что 'NLog.Config' не смог распознать настройки из appsettings.json. Попытайтесь изменить свои настройки, как я упоминал, и выяснить, можете ли вы решить эту проблему. –

+0

Это работает. Благодаря! – Pankaj

Смежные вопросы