web-dev-qa-db-fra.com

NLog ne crée pas de fichier journal

J'essaie d'ajouter la journalisation à une application s'exécutant sur un périphérique mobile avec Windows Mobile 6.1. Framework Framework .NET Compact 3.5. en utilisant NLog.

J'ai la version appropriée de la distribution NLog installée.

Cependant, aucun fichier journal n'est créé.

Voici mon fichier 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">
  <targets>
    <target name="logfile" xsi:type="File" fileName=".\Neolant.ASRM.Terminal.log" layout="${longdate}|${level}|${message}|${exception}" autoFlush="true"/>
  </targets>
  <rules>
    <logger name="*" minlevel="Info" writeTo="logfile" />
  </rules>
</nlog>

Et voici le code de test que j'utilisais:

public static void Main()
{
    try
    {
        AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
        var logger = NLog.LogManager.GetLogger("UpperLevel");
        logger.Info("test test test.");
        try
        {
            throw new Exception("Unexpected!");
        }
        catch (Exception e)
        {
            var logger = NLog.LogManager.GetLogger("UpperLevel");
            logger.WarnException("An exception occured.", e);
        }
        throw new Exception("Suddenly!");           
    }
    finally
    {
        NLog.LogManager.Flush();
    }
}

private static void CurrentDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs unhandledExceptionEventArgs)
{
    var logger = NLog.LogManager.GetLogger("UpperLevel");
    logger.FatalException("Application closed due to exception.", unhandledExceptionEventArgs.ExceptionObject as Exception);
    NLog.LogManager.Flush();
}
29
Srv19

Le fichier journal était en cours de création, mais pas dans le répertoire de l'application.

L'utilisation de $ {basedir} layout renderer dans le nom de fichier s'est avérée être une solution.

20
Srv19

J'ai eu ce problème s'est avéré que mon fichier journal n'était pas copié dans mon répertoire de construction. La page NLog github avait la réponse. (J'ai reformulé un peu le paragraphe pour une meilleure lisibilité.) https://github.com/NLog/NLog/wiki/Logging-troubleshooting

NLog ne trouve pas le fichier de configuration. Cela peut se produire lorsque le fichier NLog.config est configuré avec Build Action = None ou Copier dans le répertoire de sortie = Ne pas copier dans Visual Studio. 

Set Build Action = Content et "Copier dans le répertoire de sortie = Copier si plus récent pour résoudre ce problème)

18
Malcolm Anderson

Si la réponse marquée comme réponse n’est pas tout à fait claire, vous pouvez vérifier l’exemple. 

<targets>
  <target xsi:type="Console" name="console" 
    layout="${longdate}|${level}|${message}" />
  <target xsi:type="File" name="ErrorLog" fileName="${basedir}/error.txt"
          layout="${longdate}
          Trace: ${stacktrace} 
          ${message}" />
  <target xsi:type="File" name="AccessLog" fileName="${basedir}/access.txt"
          layout="${shortdate} | ${message}" />
</targets>

Tiré d'ici en utilisant l'emplacement AppData dans NLog

Dans mon cas, j'ai raté les règles après les avoir définies fonctionne comme un charme

 <rules>
    <logger name="*" minlevel="Trace" writeTo="logfile" />
    <!-- add your logging rules here -->

    <!--
    Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace)  to "f"
    <logger name="*" minlevel="Debug" writeTo="f" />
    -->
  </rules>
2
Jayendran

du guide de dépannage nlog

Vérifiez les propriétés du fichier Nlog.config: Copier dans le répertoire de sortie doit être Copier toujours

S'il vous plaît voir l'image lien https://i.stack.imgur.com/AlUG5.png

2
Prem Kumar Badri

J'ai également fait face au même problème, finalement je l'ai résolu. J'ai eu une application Web, où je veux implémenter NLog. Veuillez trouver les étapes suivantes pour implémenter NLog.

Étape 1: - Allez dans le gestionnaire de paquets NuGet et installez les paquets suivants .  enter image description here

Étape 2: - Ouvrez Web.config et ajoutez les lignes suivantes.

<configSections>
<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog"/>
</configSections>
 <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
  autoReload="true"
  throwExceptions="false"
  internalLogLevel="Off" internalLogFile="D:\projects\NlogWeb\nlog-internal.log">
<targets>
  <target name="console" xsi:type="ColoredConsole" layout="${message}" />
  <!--Write logs to File-->
  <target name="file" xsi:type="File" fileName="D:\projects\NlogWeb\ErrorLogFile.log" layout="--------------------- ${level}(${longdate})${machinename}-------------------- ${newline}
Exception Type:${exception:format=Type}${newline} 
Exception Message:${exception:format=Message}${newline}  
Stack Trace:${exception:format=Stack Trace}${newline}  
Additional Info:${message}${newline}" >
</target>  
</targets>   
<rules>

  <logger name="*" minlevel="trace" writeTo="file" />
</rules>
</nlog>

Étape 3: - Maintenant la dernière configuration à appeler votre fichier .cs.

using NLog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace NlogWeb
{
public partial class Home : System.Web.UI.Page
{
    private static Logger logger = LogManager.GetCurrentClassLogger();
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            throw new Exception("Divide By Zero Exception", new DivideByZeroException());
        }
        catch (Exception ex)
        {                 
            logger.Error(ex.Message);
        }
    }
  }
}

Nous avons fait. Maintenant, exécutez votre code et profitez de la journalisation. 

1
Sapnandu

À partir du guide de dépannage nlog:

https://github.com/NLog/NLog/wiki/Logging-troubleshooting

Si vous savez que votre fichier de configuration est définitivement trouvé, remplacez temporairement la section de votre fichier NLog.config par la suivante et essayez-le.

Cette règle correspond à tout enregistreur que vous avez créé et, si cela fonctionne, elle placera un fichier log.txt dans le "répertoire de base" - qui est le répertoire "bin" de votre instance de test, par exemple. Si vous utilisez le mode débogage, vous verrez log.txt dans votre dossier bin> débogage. (Ceci n'est pas expliqué très clairement dans le guide de dépannage).

Si cela fonctionne, alors vous savez que le problème vient de vos règles:

<nlog throwExceptions="true">
  <targets>
    <target name="file" type="File" fileName="${basedir}/log.txt" />
  </targets>
  <rules>
    <logger name="*" minLevel="Trace" writeTo="file" />
  </rules>
</nlog>

J'ai constaté que seul nom = "fichier" fonctionnait pour la cible - les autres valeurs ne fonctionnaient pas

En ajoutant le throwExceptions = "true" comme ci-dessus, vous obtiendrez également des messages d'erreur utiles lors du débogage.

0
Chris Halcrow