2016-08-01 24 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"); 

之后,我访问目标的日志(仍在构造函数中),并且有几条消息。但是在N个消息NLog停止将任何消息写入内存目标之后。更重要的是,如果您尝试按照名称获取目标,则返回null。同样在经过一段时间后,围绕nlog的摆弄会伴随着OutOfMemoryException。文件目标虽然工作正常。如何修复MemoryTarget不写日志和删除自己?

UPD:我看了一下NLog的内部调试日志,发现在某些时候目标被擦掉了。我有我的主程序与NLog配置和一个DLL与另一个。但他们是一样的,不应该相互冲突。内部日志在这里http://pastebin.com/M885xmBi

回答

0

所以这个问题基本上是NLog Configs的冲突。我有一个带有NLog功能的项目和一个使用该项目作为dll的wpf应用程序。即使他们的配置是相同的NLog读取第一个配置并设置目标,然后它读取第二个,但明显失败(我不知道,Nlog内部日志中没有例外)并删除了所有目标。从dll项目中删除配置修复了问题

+0

nlog用户循环缓冲区还是存储所有内容? – Thomas

+0

@Thomas老实说,我不知道存储的运行状态。如果你需要这些信息,你应该检查源代码 –