【问题标题】:NLog memory target errorNLog内存目标错误
【发布时间】:2016-08-01 11:41:57
【问题描述】:

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

【问题讨论】:

    标签: c# wpf nlog


    【解决方案1】:

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

    【讨论】:

    • nlog 用户是循环缓冲区还是存储所有内容?
    • @Thomas 老实说,我不知道存储的运行时状态。如果您需要该信息,您应该检查源代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多