Исключение NLog при разборе nlog.config - цель не может быть найдена: 'EventLog' - PullRequest
2 голосов
/ 12 июня 2019

Я занимаюсь разработкой C # .NET Core 2.2 Web-Api на Visual Studio 2017 .Я реализую NLog 4.6.1, как описано в github .Когда я запускаю свое приложение, используя IIS , NLog не записывает в Elasticsearch .Ошибка возникает в строке в program.cs

var logger = NLog.Web.NLogBuilder.ConfigureNLog("NLog.config").GetCurrentClassLogger();

Я нахожу сообщение об ошибке в NLogError.log :

2019-06-12 09:00:49.1606 Error Penter code herearsing configuration from NLog.config failed. Exception: NLog.NLogConfigurationException: Exception when parsing NLog.config.  ---> System.ArgumentException: Target cannot be found: 'EventLog'
   at NLog.Config.Factory`2.CreateInstance(String itemName)
   at NLog.Config.LoggingConfigurationParser.ParseTargetsElement(ILoggingConfigurationElement targetsElement)
   at NLog.Config.LoggingConfigurationParser.ParseNLogSection(ILoggingConfigurationElement configSection)
   at NLog.Config.LoggingConfigurationParser.LoadConfig(ILoggingConfigurationElement nlogConfig, String basePath)
   at NLog.Config.XmlLoggingConfiguration.ParseNLogElement(ILoggingConfigurationElement nlogElement, String filePath, Boolean autoReloadDefault)
   at NLog.Config.XmlLoggingConfiguration.Initialize(XmlReader reader, String fileName, Boolean ignoreErrors)
   --- End of inner exception stack trace ---

Я попытался сократить мой конфигурационный файл, чтобы избежать других проблем, но все еще та же ошибка.Цель "EventLog" - найти там.

NLog.config:

<?xml version="1.0" encoding="utf-8" ?>
      <nlog autoReload="true" throwExceptions="false"
          internalLogLevel="Error" internalLogFile="NLogError.log"
          xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
          <targets>
            <target name="EventLog" xsi:type="EventLog"
              layout="${longdate} ${level} ${callsite} -> ${message} 
              ${exception:format=Message,StackTrace}"
              source="MonDBSvc" />
          </targets>
          <rules>
            <logger name="MonDbSvc" minlevel="Error" writeTo="EventLog" 
              log="Application" />
          </rules>
      </nlog>

Файл NLog.config и файл program.cs находятся на одном корневом уровне в папке приложения..

Я пытался написать NL og.config nad nl og.config для имени файла и в этом кодестрока выше.

Что может вызвать эту проблему синтаксического анализа?Что я могу попытаться исправить?

Спасибо за поддержку!

Когда я изменяю уровень журнала с ошибки на предупреждение, я получаю более явное сообщение.Я уверен, что XML действителен как XML.

2019-06-12 10:27:51.3735 Info Message Template Auto Format enabled
2019-06-12 10:27:51.4347 Error Parsing configuration from NLog.config failed. Exception: NLog.NLogConfigurationException: Exception when parsing NLog.config.  ---> System.ArgumentException: Target cannot be found: 'EventLog'
   at NLog.Config.Factory`2.CreateInstance(String itemName)
   at NLog.Config.LoggingConfigurationParser.ParseTargetsElement(ILoggingConfigurationElement targetsElement)
   at NLog.Config.LoggingConfigurationParser.ParseNLogSection(ILoggingConfigurationElement configSection)
   at NLog.Config.LoggingConfigurationParser.LoadConfig(ILoggingConfigurationElement nlogConfig, String basePath)
   at NLog.Config.XmlLoggingConfiguration.ParseNLogElement(ILoggingConfigurationElement nlogElement, String filePath, Boolean autoReloadDefault)
   at NLog.Config.XmlLoggingConfiguration.Initialize(XmlReader reader, String fileName, Boolean ignoreErrors)
   --- End of inner exception stack trace ---
2019-06-12 10:27:51.4347 Warn Failed loading config from NLog.config. Invalid XML?
2019-06-12 10:27:51.4597 Debug Watching path 'C:\Repositories\DataPicker\DataPicker\DataPicker.Api' filter 'NLog.config' for changes.
2019-06-12 10:27:51.4597 Debug --- NLog configuration dump ---
2019-06-12 10:27:51.4680 Debug Targets:
2019-06-12 10:27:51.4680 Debug Rules:
2019-06-12 10:27:51.4680 Debug --- End of NLog configuration dump ---
2019-06-12 10:27:51.4680 Trace FindReachableObject<System.Object>:
2019-06-12 10:27:51.4680 Info Found 0 configuration items
2019-06-12 10:27:51.4889 Debug Targets not configured for logger: DataPicker.Api.Program
2019-06-12 10:27:55.2679 Debug ScanAssembly('NLog.Web.AspNetCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c')
2019-06-12 10:27:55.7717 Debug Hide assemblies for callsite
2019-06-12 10:27:55.7717 Trace Assembly 'NLog.Extensions.Logging, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c' will be hidden in callsite stacktrace
2019-06-12 10:27:55.7855 Debug ScanAssembly('NLog.Extensions.Logging, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c')
2019-06-12 10:27:55.7855 Trace Assembly 'Microsoft.Extensions.Logging, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' will be hidden in callsite stacktrace
2019-06-12 10:27:55.7855 Trace Assembly 'Microsoft.Extensions.Logging.Abstractions, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' will be hidden in callsite stacktrace
2019-06-12 10:27:55.8068 Debug Targets not configured for logger: Microsoft.AspNetCore.Hosting.Internal.ApplicationLifetime
2019-06-12 10:27:55.8068 Debug Targets not configured for logger: Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv
2019-06-12 10:27:55.8178 Debug Targets not configured for logger: Microsoft.AspNetCore.Server.Kestrel
2019-06-12 10:27:55.8465 Debug Targets not configured for logger: Microsoft.AspNetCore.DataProtection.TypeForwardingActivator
2019-06-12 10:27:55.8465 Debug Targets not configured for logger: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager
2019-06-12 10:27:55.8622 Debug Targets not configured for logger: Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.CngGcmAuthenticatedEncryptorFactory
2019-06-12 10:27:55.8622 Debug Targets not configured for logger: Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.CngCbcAuthenticatedEncryptorFactory
2019-06-12 10:27:55.8622 Debug Targets not configured for logger: Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ManagedAuthenticatedEncryptorFactory
2019-06-12 10:27:55.8776 Debug Targets not configured for logger: Microsoft.AspNetCore.DataProtection.XmlEncryption.DpapiXmlEncryptor
2019-06-12 10:27:55.8776 Debug Targets not configured for logger: Microsoft.AspNetCore.DataProtection.Repositories.FileSystemXmlRepository
2019-06-12 10:27:55.9084 Debug Targets not configured for logger: Microsoft.AspNetCore.DataProtection.KeyManagement.DefaultKeyResolver
2019-06-12 10:27:55.9084 Debug Targets not configured for logger: Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingProvider
2019-06-12 10:27:55.9084 Debug Targets not configured for logger: Microsoft.AspNetCore.DataProtection.Internal.DataProtectionStartupFilter
2019-06-12 10:27:55.9835 Debug Targets not configured for logger: Microsoft.AspNetCore.DataProtection.XmlEncryption.DpapiXmlDecryptor
2019-06-12 10:27:56.1465 Debug Targets not configured for logger: Microsoft.AspNetCore.Mvc.Formatters.JsonPatchInputFormatter
2019-06-12 10:27:56.1465 Debug Targets not configured for logger: Microsoft.AspNetCore.Mvc.Formatters.JsonInputFormatter
2019-06-12 10:27:56.1674 Debug Targets not configured for logger: Microsoft.AspNetCore.Mvc.RazorPages.Internal.RazorProjectPageRouteModelProvider
2019-06-12 10:27:56.2420 Debug Targets not configured for logger: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker
2019-06-12 10:27:56.2524 Debug Targets not configured for logger: Microsoft.AspNetCore.Mvc.Razor.Internal.RazorViewCompiler
2019-06-12 10:27:56.2524 Debug Targets not configured for logger: Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector
2019-06-12 10:27:56.2707 Debug Targets not configured for logger: Microsoft.AspNetCore.Mvc.ViewFeatures.CookieTempDataProvider
2019-06-12 10:27:56.2707 Debug Targets not configured for logger: Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker
2019-06-12 10:27:56.2814 Debug Targets not configured for logger: Microsoft.AspNetCore.Mvc.Internal.ActionSelector
2019-06-12 10:27:56.2814 Debug Targets not configured for logger: Microsoft.AspNetCore.Mvc.Internal.MvcRouteHandler
2019-06-12 10:27:56.2984 Debug Targets not configured for logger: Microsoft.AspNetCore.Builder.RouterMiddleware
2019-06-12 10:27:56.3256 Debug Targets not configured for logger: Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware
2019-06-12 10:27:56.3523 Debug Targets not configured for logger: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware
2019-06-12 10:27:56.3523 Debug Targets not configured for logger: Microsoft.AspNetCore.Server.IISIntegration.IISMiddleware
2019-06-12 10:27:56.3592 Debug Targets not configured for logger: Microsoft.AspNetCore.HttpOverrides.ForwardedHeadersMiddleware
2019-06-12 10:27:56.3592 Debug Targets not configured for logger: Microsoft.AspNetCore.Hosting.Internal.WebHost
2019-06-12 10:27:56.3783 Debug Targets not configured for logger: Microsoft.AspNetCore.Hosting.Internal.HostedServiceExecutor

Ответы [ 4 ]

2 голосов
/ 12 июня 2019

Об объекте не удалось найти: ошибка «EventLog»

Ошибка «Объект не может быть найден» возникает, когда не удается создать экземпляр класса Target.Как вы могли бы подключить цели в NLog, NLog не знает, какие доступны заранее.Также обратите внимание, что не все цели доступны на всех платформах.

Последнее также относится и к цели журнала событий - доступно не на всех платформах:

См. https://github.com/NLog/NLog/wiki/EventLog-target

Поддерживаемые платформы: ограничено (доступно толькодля Net35, Net40, Net45 и NetStandard 2.0. Примечание: NetStandard 2.0 должен использовать пакет NLog.WindowsEventLog)

Если вы используете .NET Core 1.x, он не будет работать - Microsoft сделалане портировать API, потому что журнал событий предназначен только для Windows.

. Для .NET Core 2 необходимо установить пакет NLog.WindowsEventLog и добавить его в свой файл nlog.config (вверху):

<extensions>
    <add assembly="NLog.WindowsEventLog"/>
</extensions>

Обратите внимание: ошибка, которую вы публикуете, скажет, что цель недоступна.Конфигурация кажется действительной, и в коде регистратора не требуется никаких изменений.Также NLog.config или nlog.config не является проблемой.

Эластичный поиск

Возможно, я пропустил это, но зачем использовать цель журнала событий для эластичного поиска?Есть Эластичная цель поиска.Пакет https://www.nuget.org/packages/NLog.Targets.ElasticSearch

Этот пакет поддерживает .NET Standard 1.3+ и .NET Standard 2 +

использование:

<nlog>
  <extensions>
    <add assembly="NLog.Targets.ElasticSearch"/>
  </extensions>
  <targets>
    <target name="elastic" xsi:type="BufferingWrapper" flushTimeout="5000">
      <target xsi:type="ElasticSearch"/>
    </target>
  </targets>
  <rules>
    <logger name="*" minlevel="Info" writeTo="elastic" />
  </rules>
</nlog>
1 голос
/ 13 июня 2019

Спасибо всем вам!

У меня все получилось, теперь логи пишутся в Elasticsearch. Моя текущая конфигурация выглядит так:

<?xml version="1.0" encoding="utf-8" ?>
<nlog autoReload="true" throwExceptions="false"
      internalLogLevel="Error" internalLogFile="NLogError.log"
      xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <extensions>
    <add assembly="NLog.Web.AspNetCore"/>
  </extensions>
  <targets>
    <target xsi:type="Network"
        name="CentralLog"
        newLine ="false"
        maxMessageSize="65000"
        connectionCacheSize="5"
        encoding="utf-8"
        keepConnection="false"
        maxQueueSize="100"
        address="tcp://abc.xyz.org:5544"
        onOverflow="Split">
     <layout type="JsonLayout">
      <attribute name="machinename" layout="${machinename}" />
      <attribute name="level" layout="${level:upperCase=true}" />
      <attribute name="processname" layout="${processname}" />
      <attribute name="processid" layout="${processid}" />
     </layout>
   </target>
  </targets>
  <rules>
  <logger name="*" minlevel="Trace" writeTo="CentralLog" />
  </rules>
</nlog>
0 голосов
/ 12 июня 2019

Вы можете найти более подробную информацию здесь для регистрации сообщения:

https://github.com/NLog/NLog.Web/wiki/Getting-started-with-ASP.NET-Core-2

Используйте это, чтобы обеспечить доступ к журналу событий: https://www.nuget.org/packages/NLog.WindowsEventLog

Добавлентег в файле конфигурации:

<extensions>
    <add assembly="NLog.Web.AspNetCore"/>
</extensions>

Надеюсь, это поможет вам.

0 голосов
/ 12 июня 2019

Вы поместили атрибут журнала в <logger> вместо <target>. Пожалуйста, попробуйте следующий конфиг:

<?xml version="1.0" encoding="utf-8" ?>
<nlog autoReload="true" throwExceptions="false"
  internalLogLevel="Error" internalLogFile="NLogError.log"
  xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <targets>
    <target name="EventLog" xsi:type="EventLog"
      layout="${longdate} ${level} ${callsite} -> ${message} 
      ${exception:format=Message,StackTrace}"
      source="MonDBSvc" log="Application" />
  </targets>
  <rules>
    <logger name="MonDbSvc" minlevel="Error" writeTo="EventLog" />
  </rules>
</nlog>

UPDATE

Также попробуйте инициализировать ваш регистратор в файле c #, как показано ниже:

var logger = LogManager.GetLogger("MonDbSvc");
...