2012-05-11 20 views
14

Ich versuche, Protokollierung zu Anwendung auf dem mobilen Gerät mit Windows Mobile 6.1 hinzuzufügen. .NET Compact Framework 3.5. mit NLog.NLog erstellt keine Protokolldatei

Ich habe entsprechende Version von NLog Verteilung 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> 

Hier ist der Testcode, den ich verwendet habe.

+1

Sie mit verschiedenen Datei testeten Namen/Pfade? ZB "fileName =" Neolant.ASRM.Terminal.log "' ohne '. \\"? Die Nlog.Config befindet sich im App-Verzeichnis? Zusätzlich können Sie die [Nlogs interne Protokollierung] (http://nlog-project.org/wiki/Logging_is_not_working_-_how_to_troubleshoot_it%3F) aktivieren, um zusätzliche Informationen zu Ihrem Problem zu erhalten. – nemesv

+0

Ich habe versucht Dateinamen mit und ohne '. \' Mit ähnlichen (das heißt, ohne) Ergebnisse. NLog.config wird im Anwendungsverzeichnis bereitgestellt. Ich werde jetzt versuchen, das interne Logging durchzuführen. – Srv19

+0

Nach dem Link, den Sie angegeben haben, bin ich auf die Lösung gestoßen. Danke vielmals. – Srv19

Antwort

17

Die Protokolldatei wurde erstellt - aber nicht im Anwendungsverzeichnis.

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

+0

Ihr Link funktioniert nicht. Bitte reparieren Sie es. –

+2

Vielen Dank. Behoben. – Srv19

+0

Hmm komisch. Dies hat es für mich behoben, aber ich habe eine andere Anwendung, wo dies nicht angegeben werden muss (und die Ausgabe funktioniert immer noch) – Jowen

11

Falls die Antwort als Antwort markiert ist nicht alles, was Sie freigeben können 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 using AppData location in NLog

7

hatte ich das Problem, dass war meine Protokolldatei nicht stellte sich heraus kopiert werden zu meinem Build-Verzeichnis. Die NLog GitHub Seite hatte die Antwort. (Ich habe den Absatz ein wenig zur besseren Lesbarkeit umformatiert.) https://github.com/NLog/NLog/wiki/Logging-troubleshooting

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

Set Build Action = Inhalt und „auf Ausgabeverzeichnis kopieren = Kopieren, falls neuere dieses Problem zu beheben)

+0

Danke. Die Einstellung "Nicht kopieren" war das Problem. – joshmcode

0

Vom nlog Anleitung zur Fehlerbehebung:

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

Wenn Sie, dass Ihre Konfigurationsdatei wissen, ist, Auf jeden Fall wird der Abschnitt Ihrer NLog.config-Datei vorübergehend durch folgenden Eintrag ersetzt:

Diese Regel wird mit allen von Ihnen erstellten Protokolldateien übereinstimmen, und wenn sie funktionieren, wird log.tx eingefügt t-Datei im 'Basisverzeichnis' - das ist das 'bin' Verzeichnis für Ihre Testinstanz z. Wenn Sie im Debug-Modus arbeiten, sehen Sie log.txt im Ordner bin> debug. (Dies wird in der Fehlerbehebungsanleitung nicht sehr deutlich erklärt).

Wenn das funktioniert, dann wissen Sie, dass das Problem mit Regeln ist:

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

ich, dass nur = „file“ name gefunden für das Ziel gearbeitet - andere Werte haben nicht

Das Hinzufügen des throwExceptions = "true" wie oben wird auch sicherstellen, dass Sie beim Debuggen nützliche Fehlermeldungen erhalten.

0

In meinem Fall habe ich die Regeln verpasst, nachdem die Regeln definieren, wirkt wie ein Zauber

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