2017-06-14 2 views
1

J'essaie de faire un petit pic et je n'arrive pas à générer le fichier journal.NLog ne lit pas mes paramètres app.config dans une application console

Ceci est ma configuration NLog:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 

    <configSections> 
    <section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog" /> 
    </configSections> 

    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /> 
    </startup> 

    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="Npgsql" publicKeyToken="5d8b90d52f46fda7" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-3.2.4.0" newVersion="3.2.4.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 


    <nlog throwExceptions="true" 
     internalLogLevel="Warning" 
     internalLogFile="Rebus.Tests.Output.NLog.Internal.log" 
     internalLogToConsole="true" 
     xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 

    <targets> 
     <target name="normalLogfile" type="File" fileName="${basedir}/Rebus.Tests.Output.log" /> 
     <target name="normalConsole" type="Console" detectConsoleAvailable="true" /> 
    </targets> 

    <rules> 
     <logger name="NormalLog" minlevel="Trace" writeTo="normalLogfile, normalConsole" /> 
    </rules> 

    </nlog> 

</configuration> 

Et voici mon statique principal dans la console Application:

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

    logger.Error("This is a log error line"); 

Mais rien est enregistré ni LogFile ni console. Le application.exe.config se trouve dans le dossier bin/Debug runtime. Et je cherche le fichier journal avec SearchEverything afin qu'il trouve dans n'importe quel dossier où il est.

Ajout des informations à cette question si je mets un point d'arrêt pour inspecter la variable logger je ne vois aucune configuration a été lu:

enter image description here

Répondre

2

Essayez de changer

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

à

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

parce que fa Comme je sais, vous devez obtenir l'enregistreur via le nom de la cible et non via le nom de la règle.

// modifier

Avez-vous essayé de supprimer les attributs nlog en vous app.config? Juste pour être sûr qu'aucun d'eux n'est le problème.

+0

Même comportement: l'enregistreur est vide. Quoi qu'il en soit, je pense que la chaîne 'named logger' dans la méthode' GetLogger' est un nom de règle dans config.file. – ferpega

+0

Selon le document NLog, vous devez utiliser le nom du Logger lorsque vous utilisez la méthode 'GetLogger'. Avez-vous essayé de supprimer les attributs nlog de votre app.config? Juste pour être sûr qu'aucun d'eux n'est le problème. –

+0

C'était le problème @mightybdaboom Les attributs Nlog. Certains d'entre eux ne doivent pas être supportés et invalident toute la configuration de NLog. S'il vous plaît, mettez cela comme réponse pour le marquer. Merci. – ferpega