2016-08-01 4 views
0

У меня есть цель памяти и целевой файл в NLog установить как этотNLog целевая память ошибка

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

я получаю MemoryTarget в конструкторе, как этот

target = (MemoryTarget)NLog.LogManager.Configuration.FindTargetByName("memory"); 

После этого я получить доступ к атакам log (все еще в конструкторе), и есть несколько сообщений. Но после N количества сообщений NLog прекращает записывать любые сообщения в целевую память. Более того, если вы попытаетесь получить цель по имени, как в начале, она возвращает null. Также через некоторое время и вождение вокруг nlog падает с OutOfMemoryException. Хотя цель файла работает нормально. Как вы можете исправить MemoryTarget, не записывая журналы и не удаляя себя?

UPD: Я просмотрел внутренний журнал отладки NLog и заметил, что в какой-то момент цели стираются. У меня есть моя основная программа с конфигурацией NLog и DLL с другой. Но они одинаковы и не должны конфликтовать друг с другом. Внутренний журнал здесь http://pastebin.com/M885xmBi

ответ

0

Таким образом, проблема была в основном конфликтом NLog Configs. У меня был проект с функциями с NLog в них и приложение wpf, которое использует этот проект как dll. Несмотря на то, что их конфигурации были одинаковыми, NLog читает первый конфиг и устанавливает целевые объекты, затем он считывает второй, но явно не удается (я не знаю, нет исключений в внутренних журналах NLog) и удалены все цели. Удаление конфигурации из проекта dll устраняло проблему

+0

делает nlog пользовательским круговым буфером или сохраняет все? – Thomas

+0

@ Томас честно, я не знаю состояния среды хранения. Вы должны проверить исходный код, если вам нужна эта информация –