NLog内存目标错误

NLog memory target error

我在 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 停止将任何消息写入内存目标。更重要的是,如果你像我在开始时那样尝试通过名称获取目标 returns null。同样在一段时间后,围绕 nlog 的摆弄与 OutOfMemoryException 一起落下。文件目标虽然工作正常。如何修复 MemoryTarget 不写入日志并自行删除?

UPD:我查看了 NLog 内部调试日志并注意到在某些时候目标被擦除。我有一个带有 NLog 配置的主程序和一个带有另一个配置的 dll。但它们是相同的,不应相互冲突。内部日志在这里 http://pastebin.com/M885xmBi

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