У меня есть приложение 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
Я уже определил строку подключения в разделе AppSettings в appsettings.json файл. Зачем нужен другой файл App.Config. Также, если я создаю новый файл app.config, мне нужно обновить код, чтобы прочитать его? Потому что я не видел никакого кода в Startup.cs, чтобы прочитать это. – Pankaj
Я выполнил [NLog Azure Table Storage Target] (https://github.com/harouny/NLog.Extensions.AzureTableStorage), чтобы настроить строку подключения учетной записи Azure Storage. И я мог бы воспроизвести вашу проблему при настройке строки подключения в файле appsettings.json. После того, как я добавил дополнительный файл app.config, я мог бы работать с ним, как и ожидалось, на моей стороне, не обновляя ни одного кода для чтения настроек. Я предположил, что 'NLog.Config' не смог распознать настройки из appsettings.json. Попытайтесь изменить свои настройки, как я упоминал, и выяснить, можете ли вы решить эту проблему. –
Это работает. Благодаря! – Pankaj