2017-02-26 8 views
3

aus irgendeinem seltsamen Grund nlog wird nichts angezeigt wird, wenn ich an die Konsole zu schreiben, in der Main() -Methode in Program.cs ordne ich die nlog.config:NLog nichts anzeigen?

LogManager.Configuration = new XmlLoggingConfiguration("assets/packages/nlog/nlog.config"); 

Hier wird die Config:

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

Hier eine Beispielklasse:

private static readonly ILogger Logger = LogManager.GetCurrentClassLogger(); 

public MyClass() 
{ 
    Console.Write("lol"); 
    Logger.Debug("Debug test..."); 
    Logger.Error("Debug test..."); 
    Logger.Fatal("Debug test..."); 
    Logger.Info("Debug test..."); 
    Logger.Trace("Debug test..."); 
    Logger.Warn("Debug test..."); 
} 

ich weiß, dass die Methode aufgerufen wird, weil ich „lol“ bekommen, nur nicht das eigentliche Protokoll auf der Konsole, aber es schreibt in der Datei /assets/logging/log.txt.

+0

DID Sie bestätigen, dass der Dateiname Pfad korrekt ist? –

+0

Ja, würde es eine Ausnahme werfen, wenn es nicht war. – Ashkru

+0

Bitte überprüfen Sie die https://github.com/NLog/NLog/wiki/Internal-logging – Julian

Antwort

2

Die basedir ist in Bezug auf die .exe

In diesem Fall ist es wahrscheinlich in bin \ debug \ assets \ logging \ log.txt

2

Sie benötigen würde auch die Daten an Konsole zu senden. Fügen Sie ein weiteres Ziel hinzu, das wie hier beschrieben an die Konsole gesendet wird: Nlog Console target git hub example.

Und ich denke, Sie auch dieses Ziel in der (In writeTo zusammen mit File) ruleslogger setzen sollte

4

Um die Protokollausgabe auf der Konsole Sie ein Ziel hinzufügen müssen, um zu sehen, und eine Regel für sie wie folgt aus:

<?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="file.txt" /> 
    <target name="console" xsi:type="Console" /> 
</targets> 

<rules> 
    <logger name="*" minlevel="Trace" writeTo="logfile" /> 
    <logger name="*" minlevel="Info" writeTo="console" /> 
</rules> 

eine einfache Logger-Klasse Ihr Beispiel für mich gearbeitet (unter Verwendung der obigen Konfigurationsdatei)

Durch die Schaffung
class MyLoggerClass 
{ 
    public static Logger Logger = LogManager.GetCurrentClassLogger(); 
} 

class MyClass 
{ 
    static void Main(string[] args) 
    { 

     Console.Write("lol"); 
     MyLoggerClass.Logger.Debug("Debug test..."); 
     MyLoggerClass.Logger.Error("Debug test..."); 
     MyLoggerClass.Logger.Fatal("Debug test..."); 
     MyLoggerClass.Logger.Info("Debug test..."); 
     MyLoggerClass.Logger.Trace("Debug test..."); 
     MyLoggerClass.Logger.Warn("Debug test..."); 
    } 
} 

Oder Sie könnten den Logger direkt in der Klasse wie folgt verwenden:

class MyClass 
{ 
    private static Logger Logger = LogManager.GetCurrentClassLogger(); 
    static void Main(string[] args) 
    { 
     Console.Write("lol"); 
     Logger.Debug("Debug test..."); 
     Logger.Error("Debug test..."); 
     Logger.Fatal("Debug test..."); 
     Logger.Info("Debug test..."); 
     Logger.Trace("Debug test..."); 
     Logger.Warn("Debug test..."); 
    } 
} 

Ausgabe von log.txt:

2017-02-26 16:13:44.8388|ERROR|NLogTest.Program|Debug test... 
2017-02-26 16:13:44.8856|FATAL|NLogTest.Program|Debug test... 
2017-02-26 16:13:44.8856|INFO|NLogTest.Program|Debug test... 
2017-02-26 16:13:44.8971|WARN|NLogTest.Program|Debug test...