NLog内存目标错误

本文关键字:错误 目标 内存 NLog | 更新日期: 2023-09-27 17:59:44

我在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

NLog内存目标错误

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