2
votes

Exception NLog lors de l'analyse de nlog.config - La cible est introuvable: 'EventLog'

Je développe une C # .NET Core 2.2 Web-Api sur Visual Studio 2017 . J'implémente NLog 4.6.1 comme décrit sur github . Lorsque je démarre mon application avec IIS, NLog n'écrit pas dans Elasticsearch . Une erreur se produit à la ligne dans program.cs

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

Je trouve un message d'erreur dans NLogError.log :

XXX

J'ai essayé de raccourcir mon fichier de configuration pour éviter d'autres problèmes mais toujours la même erreur. La cible "EventLog" est d'y trouver.

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>

Le fichier NLog.config et le fichier program.cs se trouvent sur le même niveau racine dans le dossier de l'application.

J'ai essayé d'écrire NL og.config nad nl strong> og.config pour le nom de fichier et à cette ligne de code ci-dessus.

Qu'est-ce qui pourrait causer ce problème d'analyse? Que puis-je essayer pour résoudre ce problème?

Merci pour votre soutien!

Lorsque je change le niveau de journalisation d'erreur en avertissement, j'obtiens un message plus explicite. Je suis sûr que le xml est valide en tant que xml.

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 ---


8 commentaires

Cela pourrait être un problème avec le format du fichier nlog.config, regardez ici: github.com/nlog/NLog/wiki/EventLog-target


Hey Donal, j'ai essayé d'utiliser l'exemple du lien que vous avez posté mais j'obtiens toujours la même erreur. Lorsque j'efface la cible de l'étiquette de trou, j'obtiens l'erreur qu'elle n'est pas trouvée. Cela signifie pour moi qu'il regarde la bonne cible de balise, mais comment il y a des problèmes avec cela?! Erreur: NLog.NLogConfigurationException: Cible «EventLog» introuvable pour la règle de journalisation: MonDbSvc.


Essayez de supprimer la section des règles


Ajoutez internalLogLevel = "Trace" internalLogFile = "c: \ temp \ nlog-internal.log" comme attribut à votre balise . Ensuite, le fichier vous montrera quelle est l'erreur.


@Priyank Panchal J'ajoute le message de journal d'avertissement ci-dessus au message initial.


@Donal Supprimer la section des règles ne fait aucune différence. La même erreur se produit.


Veuillez noter que cette erreur n'a rien à voir avec le format du fichier nlog.config (ou la casse du nom de fichier)


Grâce à @PriyankPanchal, j'ai trouvé mon problème. Ce journal interne à nlog m'a aidé à découvrir que je devais ajouter NLog.Web à mon (mes) projet (s).


4 Réponses :


0
votes

Vous avez égaré l'attribut de journal dans au lieu de . Veuillez essayer la configuration suivante:

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

UPDATE

Essayez également d'initialiser votre logger dans le fichier c # comme ci-dessous:

<?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>


5 commentaires

@FrankMehlhop, veuillez vérifier ma mise à jour si cela vous aide.


@ Priyank Panchal Cette nouvelle initialisation de l'enregistreur ne fonctionne pas non plus. Il n'écrit pas dans Elasticsearch et bien sûr n'utilise pas mon nlog.config. Mais il est important que je puisse utiliser mes configurations.


@FrankMehlhop, votre fichier nlog.config est configuré pour écrire des journaux dans EventLog, pas dans elasticsearch. Je ne sais pas comment cela est lié à elasticsearch. Désolé, je n'ai pas utilisé elasticsearch avec NLog. Votre exception est-elle partie?


@PriyankPanchal, vous avez raison Le fichier nlog.config est configuré pour écrire des journaux dans EventLog, pas dans elasticsearch.


Ceci est une observation valide (l'attribut de journal a été mal placé) mais veuillez noter que les exceptions "Cible introuvable" n'ont rien à voir avec la configuration / mise en page XML.



0
votes

Vous pouvez trouver plus de détails ici pour enregistrer le message:

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

Utiliser ceci pour fournir l'accès au journal des événements: https://www.nuget.org/packages/NLog.WindowsEventLog p >

Ajout de la balise dans le fichier de configuration:

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

J'espère que cela vous aidera.


12 commentaires

Votre solution imprimera les journaux dans un fichier, tandis qu'OP essaie d'imprimer les journaux dans EventLog. La solution que vous avez fournie est très générique et ne correspond peut-être pas à ce que recherche OP.


C'est vrai Priyank Panchal. Et le niveau de journalisation Info donne également des informations pas plus détaillées.


System.ArgumentException: La cible est introuvable: 'EventLog', pour cela, vous devez utiliser: nuget. org / packages / NLog.WindowsEventLog


@Jayoti Parkash J'implémente ce package mais cela ne m'apporte pas la solution de mon problème.


ajoutez l'assembly en haut de votre NLog.config: nlog-project.org/schemas/NLog.xsd " xmlns: xsi = " w3.org/2001/XMLSchema-instance ">


@Jayoti Prakash J'obtiens une exception pour cette


@FrankMehlhop pouvez-vous ajouter cette balise dans le fichier de configuration avant l'option des cibles, c'est-à-dire qu'il manque actuellement


@FrankMehlhop pouvez-vous publier l'exception que vous obtenez pour la balise .


@JayotiParkash Error EventLogTarget (Name = EventLog): Erreur lors de la connexion à EventLog. Exception: System.Security.SecurityException: la source n'a pas été trouvée, mais certains ou tous les journaux d'événements n'ont pas pu être recherchés. Journaux inaccessibles: sécurité.


C'est un problème de sécurité, vous devez autoriser / ajouter IIS_Users pour la même chose dans IIS pour fournir l'accès. "Le fichier NLog.config est au même niveau racine dans le dossier de l'application". ou conservez le fichier journal à un emplacement différent et ajoutez des autorisations à ce dossier pour l'écriture du fichier.


Ok @JayotiParkash, j'ai changé le chemin et maintenant j'obtiens la même erreur qu'avant: Exception lors de l'analyse de C: \ Repositories \ ... \ NLog.config. ---> System.ArgumentException: La cible est introuvable: 'EventLog'


Ok, regardez ici si c'est la même chose que vous réalisez: github.com/NLog/ NLog / pull / 2547



4
votes

À propos de la cible introuvable: erreur 'EventLog'

L'erreur «Target cannot be found» est générée lorsque la classe Target ne peut pas être instanciée. Comme vous pourriez brancher des cibles dans NLog, NLog ne sait pas lesquelles sont disponibles en coup droit. Veuillez également noter que toutes les cibles ne sont pas disponibles sur toutes les plateformes.

Ce dernier est également le cas pour la cible Eventlog - n'est pas disponible sur toutes les plateformes:

Voir https://github.com/NLog/NLog/wiki/EventLog-target

Plates-formes prises en charge: limitée (disponible uniquement pour Net35, Net40, Net45 et NetStandard 2.0. Remarque: NetStandard 2.0 doit utiliser le package NLog.WindowsEventLog)

Si vous utilisez .NET Core 1.x, cela ne fonctionnera pas - Microsoft n'a pas porté l'API car le journal des événements est uniquement Windows.

Pour .NET Core 2 vous devez installer le package NLog.WindowsEventLog et l'ajouter dans votre nlog.config ( en haut):

<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>

Remarque: l'erreur que vous publiez indiquera que la cible n'est pas disponible. La configuration semble être valide et aucune modification n'est nécessaire dans le code de l'enregistreur. NLog.config ou nlog.config n'est pas non plus un problème.

Recherche élastique

Je l'ai peut-être manqué, mais pourquoi utiliser la cible du journal des événements pour la recherche élastique? Il existe une cible de recherche élastique. Package https://www.nuget.org/packages/NLog.Targets.ElasticSearch a>

Ce package prend en charge l'utilisation de .NET Standard 1.3+ et .NET Standard 2+

:

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

0 commentaires

1
votes

Merci à vous tous!

Je l'ai fait fonctionner, les journaux sont en train d'écrire dans Elasticsearch. Ma configuration actuelle ressemble à ceci:

<?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>


3 commentaires

C'est un peu déroutant de voir une cible File et non une Elasticsearch;)


@Julian Excusez-moi, j'ajuste le fichier ci-dessus.


OK, de toute façon, pour cette configuration, n'est pas nécessaire. Il n'y a rien dans votre exemple qui utilise NLog.Web.AspNetCore. Voir nlog-project.org/config