web-dev-qa-db-de.com

NLog erstellt keine Protokolldatei

Ich versuche, einer Anwendung, die auf einem mobilen Gerät mit Windows Mobile 6.1 ausgeführt wird, die Protokollierung hinzuzufügen. .NET Compact Framework 3.5. mit NLog.

Ich habe die entsprechende Version der NLog-Distribution installiert.

Es werden jedoch keine Protokolldateien erstellt.

Hier ist meine NLog.config-Datei:

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

Und hier ist der Testcode, den ich verwendet habe:

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

Die Protokolldatei wurde erstellt - jedoch nicht im Anwendungsverzeichnis.

Die Verwendung von $ {basedir} layout-Renderer als Teil des Dateinamens erwies sich als Lösung.

20
Srv19

Ich hatte dieses Problem festgestellt, dass meine Protokolldatei nicht in mein Build-Verzeichnis kopiert wurde. Die NLog-Github-Seite hatte die Antwort. (Ich habe den Absatz zur besseren Lesbarkeit ein wenig umformatiert.) https://github.com/NLog/NLog/wiki/Logging-tr Troubleshooting

NLog kann die Konfigurationsdatei nicht finden. Dies kann passieren, wenn die Datei NLog.config mit Build Action = None oder Copy to Output Directory = In Visual Studio nicht kopieren konfiguriert ist. 

Set Build Action = Content und "Copy to Output Directory = Copy, falls neuer, um dies zu beheben)

18

Falls die als Antwort markierte Antwort nicht so eindeutig ist, können Sie das Beispiel überprüfen 

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

Von hier genommen mit AppData-Speicherort in NLog

In meinem Fall habe ich die Regeln verpasst, nachdem ich die Regeln definiert habe, die wie ein Zauber wirken

 <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

von der Nlog-Anleitung zur Fehlerbehebung

Bitte überprüfen Sie die Eigenschaften der Nlog.config-Datei: In Ausgabeverzeichnis kopieren sollte Immer kopieren sein.

Bitte zeigen Sie den Bildlink https://i.stack.imgur.com/AlUG5.png

2

Ich hatte auch das gleiche Problem, endlich habe ich es gelöst. Ich hatte eine Webanwendung, in der ich NLog implementieren möchte. Bitte finden Sie die folgenden Schritte, um NLog zu implementieren.

Schritt 1: - Gehen Sie zum NuGet-Paketmanager und installieren Sie die folgenden Pakete .  enter image description here

Schritt 2: - Öffnen Sie Web.config und fügen Sie die folgende Zeile hinzu

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

Schritt 3: - Nun die letzte Konfiguration, die in Ihrer CS-Datei aufgerufen werden soll.

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);
        }
    }
  }
}

Wir haben getan Führen Sie jetzt Ihren Code aus und genießen Sie die Protokollierung. 

1
Sapnandu

Aus dem Nlog-Handbuch zur Fehlerbehebung:

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

Wenn Sie wissen, dass Ihre Konfigurationsdatei definitiv gefunden wird, ersetzen Sie den Abschnitt Ihrer NLog.config-Datei vorübergehend durch den folgenden und versuchen Sie es.

Diese Regel passt zu jedem von Ihnen erstellten Logger. Wenn dies funktioniert, wird eine log.txt-Datei im 'Basisverzeichnis' abgelegt. Dies ist das 'bin'-Verzeichnis für Ihre Testinstanz, z. Wenn Sie im Debug-Modus arbeiten, wird log.txt im Ordner bin> debug angezeigt. (Dies wird im Handbuch zur Fehlerbehebung nicht genau erklärt).

Wenn dies funktioniert, wissen Sie, dass das Problem in Ihren Regeln liegt:

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

Ich habe festgestellt, dass nur name = "file" für das Ziel funktioniert - andere Werte nicht

Durch das Hinzufügen der throwExceptions = "true" wie oben wird sichergestellt, dass beim Debuggen nützliche Fehlermeldungen angezeigt werden.

0
Chris Halcrow