我在NLog中设置了一个Memory目标和一个File目标
<?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 :(得分:0)
所以问题基本上是NLog Configs的冲突。我有一个带有NLog函数的项目和一个使用该项目作为dll的wpf应用程序。即使他们的配置是相同的NLog读取第一个配置并设置目标,然后它读取第二个但显然失败(我不知道,NLog内部日志中没有例外)并删除所有目标。从dll项目中删除配置修复了问题