NLog не может прочитать app.config configSection в консольном приложении .NET Core 2.2 - PullRequest
0 голосов
/ 11 октября 2019

Я устраняю проблему, из-за которой NLog не загружает свою конфигурацию из App.config в консольном приложении .NET Core 2.2.

При вызове NLog.LogManager.GetCurrentClassLogger() результирующий объект остается пустым и не имеет целей ведения журнала или другой конфигурации.

<appSettings> элементы конфигурации можно найти без проблем, используя обычный метод: ConfigurationManager.AppSettings["settingKey"].

В процессе выяснения этого я позвонил ConfigurationManager.GetSection("nlog"), чтобы просто посмотретьесли бы я мог получить настройки вручную. Это вызвало следующее исключение:

System.Configuration.ConfigurationErrorsException: 
'An error occurred creating the configuration section handler for nlog: 
Could not load type 'NLog.Config.ConfigSectionHandler' from assembly 'NLog'

Весь app.config из моего примера приложения выглядит следующим образом:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
  </configSections>
  <appSettings>
    <add key="value1" value="TEST1"/>
    <add key="value2" value="TEST2"/>
  </appSettings>
  <nlog>
    <targets>
      <target name="logfile" type="File" fileName="${basedir}/logs/${shortdate}.log" layout="${longdate} ${uppercase:${level}} ${message}" />
      <target name="logconsole" type="Console" />
    </targets>
    <rules>      
      <logger name="*" minlevel="Info" writeTo="logconsole"/>
      <logger name="*" minlevel="Info" writeTo="logfile"/>
    </rules>
  </nlog>
</configuration>

NLog - это версия 4.6.7 из nuget.

Ответы [ 2 ]

1 голос
/ 11 октября 2019

На случай, если кто-то еще столкнется с этим:

Поскольку NLog не поддерживает app.config в .NET Core, я решил создать отдельный nlog.config (с преобразованиями среды SlowCheetah) и запустить NLog.LogManager.LoadConfiguration(".\\nlog.config"); в начале приложения.

Я установлю это как ответ, если кто-то не выберет хитрый обходной путь для хранения всего в одной конфигурации.

0 голосов
/ 11 октября 2019

Может быть несколько причин. Одна из причин, с которой я столкнулся, - это разрешение на создание файла в указанной папке. Если есть какие-либо внутренние ошибки, которые будут записаны в Test_log.txt в папке bin из-за кода ниже. Также убедитесь, что целевая папка доступна для создания файла.

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xsi:schemaLocation="NLog NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true" internalLogLevel="Warn"
      internalLogFile="Test_log.txt">

  <extensions>
    <add assembly="Microsoft.ApplicationInsights.NLogTarget" />
  </extensions>

  <!-- the targets to write to -->
  <targets>
    <!-- write logs to file -->

    <target xsi:type="File" name="ownFile" fileName="C:\Logs\log_${shortdate}.log"
                 layout="${longdate}|${logger}|${uppercase:${level}}|  ${message} ${exception}" />

                 <target xsi:type="Null" name="blackhole" />

  </targets>

  <rules>
    <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
    <logger name="*" minlevel="Info" writeTo="ownFile" />
  </rules>
</nlog>
...