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

След това получавам достъп до логовете на целта (все още в конструктора) и има няколко съобщения. Но след N количество съобщения NLog спира да записва каквито и да е съобщения в паметта. Дори нещо повече, ако се опитате да получите целта по име, както правя аз в началото, тя връща нула. Също така след известно време и бъркане около nlog пада с OutOfMemoryException. Целевият файл обаче работи добре. Как можете да коригирате MemoryTarget, който не пише регистрационни файлове и се изтрива?

UPD: Погледнах вътрешния журнал за отстраняване на грешки на NLog и забелязах, че в даден момент целите се изтриват. Имам основната си програма с NLog config и dll с друга. Но те са еднакви и не трябва да влизат в конфликт помежду си. Вътрешният регистрационен файл е тук http://pastebin.com/M885xmBi


person Paul Vinogradov    schedule 01.08.2016    source източник


Отговори (1)


Така че проблемът беше основно конфликт на NLog Configs. Имах проект с функции с NLog в тях и wpf приложение, което използва този проект като dll. Въпреки че техните конфигурации бяха едни и същи, NLog прочете първата конфигурация и зададе целите, след това прочете втората, но очевидно не успя (не знам, няма изключение във вътрешните регистрационни файлове на NLog) и изтри всички цели. Премахването на конфигурацията от dll проекта реши проблема

person Paul Vinogradov    schedule 08.08.2016
comment
потребителят на nlog има ли кръгов буфер или съхранява всичко? - person Thomas; 25.09.2017
comment
@Thomas честно казано, не знам състоянията на изпълнение на хранилището. Трябва да проверите изходния код, ако имате нужда от тази информация - person Paul Vinogradov; 26.09.2017