2016-08-01 18 views
0

ich ein Speicherziel und ein Datei-Ziel in NLog wie dieseNLog Speicherzielfehler

<?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" 
    xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd" 
    autoReload="true" 
    throwExceptions="true" 
    internalLogLevel="Off" internalLogFile="D:\temp\nlog-internal.log"> 

<targets> 
    <target name="logfile" xsi:type="File" fileName="file.txt" /> 
    <target name="memory" xsi:type="Memory" layout="${level}|${time}|${message}"/> 
</targets> 

<rules> 
    <logger name="*" minlevel="Info" writeTo="logfile" /> 
    <logger name="*" minlevel="Info" writeTo="memory" /> 
</rules> 
</nlog> 

ich die MemoryTarget wie diese

im Konstruktor erhalten gesetzt haben
target = (MemoryTarget)NLog.LogManager.Configuration.FindTargetByName("memory"); 

Danach habe ich Zugriff auf das Ziel der Protokolle (immer noch im Konstruktor) und es gibt ein paar Nachrichten. Aber nach einer Anzahl N von Nachrichten hört NLog auf, irgendwelche Nachrichten in das Speicherziel zu schreiben. Noch mehr, wenn Sie versuchen, das Ziel nach Namen zu bekommen, so wie ich es am Anfang mache, gibt es null zurück. Auch nach einiger Zeit und herumfummeln fällt nlog mit einer OutOfMemoryException. Das Dateiziel funktioniert jedoch einwandfrei. Wie können Sie das MemoryTarget reparieren nicht Protokolle schreiben und löschen?

UPD: Ich schaute auf das NLog interne Debug Log und bemerkte, dass die Ziele irgendwann gelöscht wurden. Ich habe mein Hauptprogramm mit einer NLog-Konfiguration und einer DLL mit einer anderen. Aber sie sind gleich und sollten nicht miteinander in Konflikt geraten. Das interne Protokoll ist hier http://pastebin.com/M885xmBi

Antwort

0

Also das Problem war im Grunde ein Konflikt von NLog Configs. Ich hatte ein Projekt mit Funktionen mit NLog in ihnen und eine WPF-Anwendung, die dieses Projekt als DLL verwendet. Obwohl ihre Konfigurationen die gleichen NLogs waren, lasen sie die erste Konfiguration und setzten die Ziele, dann lasen sie die zweite, aber anscheinend fehlgeschlagen (ich weiß nicht, es gibt keine Ausnahme in NLog inneren Logs) und löschte alle Ziele. Entfernen Sie die Konfiguration aus dem DLL-Projekt behoben das Problem

+0

tut NSL Benutzer einen Ringspeicher oder speichert alles? – Thomas

+0

@Thomas ehrlich gesagt kenne ich nicht die Laufzeitzustände des Speichers. Sie sollten den Quellcode überprüfen, wenn Sie diese Informationen benötigen –