【问题标题】:How to access existing NLog MemoryTarget如何访问现有的 NLog MemoryTarget
【发布时间】:2019-04-07 03:48:52
【问题描述】:

我正在改造现有的日志系统以使用 NLog 代替。我在配置文件中手动添加了对 NLog 的引用:

<targets>
  <target xsi:type="File" name="fileLogger" fileName="${basedir}\TRACE\${date:format=yyyy-MM-dd}.log" layout="TimeStamp:[${date}]|${message}" />
  <target xsi:type="Memory" name="MemLogger" layout="TimeStamp:[${date}]|${message}|${Type}" />
</targets>
<rules>
  <logger name="ApplicationLogger" levels="Info,Warn,Error" writeTo="fileLogger" />
  <logger name="ApplicationLogger" levels="Info,Warn,Error" writeTo="fileLogger" />
</rules>

我想做的是在代码中提取 MemLogger 日志并访问不同的部分(类型、消息、时间戳)。我将如何做到这一点?我已经看到了如何从头开始创建一个新日志,但我不想创建一个新的内存目标,我想访问我的配置中的现有日志,从中提取日志数据,然后清除内存(这样我就没有内存泄漏)。

如何在 C# 中访问 MemLogger MemoryTarget?

【问题讨论】:

    标签: c# .net nlog


    【解决方案1】:

    很遗憾,您无法访问日志的不同部分。存储为渲染字符串的日志,所有布局渲染器都已替换为其值。您所能做的就是手动解析每个日志字符串。例如

    var target =(MemoryTarget)LogManager.Configuration.FindTargetByName("MemLogger");
    
    foreach (string log in target.Logs)
    {
        var parts = log.Split('|');
        var date = parts[0].Replace("TimeStamp:[", "").TrimEnd(']');
        var message = parts[1];
        var type = parts[2];
        //...
    }
    

    【讨论】:

    • 这工作正常,但现在我有一个新问题。如何从“MemLogger”中删除消息?如果我使用 target.Clear() 它只会清除目标实例,而不是 MemLogger 本身,因此当我的应用程序打开时间过长时会出现内存泄漏。如何清除实际的 MemLogger 日志以防止内存泄漏?
    • @Fuzzerker 记录器保存对其配置为写入的目标实例的引用。记录器不保存任何消息。它只是将日志事件写入所有目标。如果您从内存目标中清除消息,则这些消息将消失,并且不会存储在其他位置。使用一些分析器来查找内存泄漏的位置(我喜欢 Ants 分析器)
    【解决方案2】:

    类似这样的:

    var target = LogManager.Configuration.FindTargetByName("MemLogger");
    

    或者,您可以将接收到的目标转换为MemoryTarget 类型。

    【讨论】:

      【解决方案3】:

      我只好自己做:

      本地:

      IList<string> logs = LogManager.Configuration.FindTargetByName<MemoryTarget>("MyTarget").Logs;
      

      或使用演员表:

      IList<string> logs = ((MemoryTarget)LogManager.Configuration.FindTargetByName("MyTarget")).Logs;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-02
        • 1970-01-01
        • 1970-01-01
        • 2012-08-16
        • 1970-01-01
        • 1970-01-01
        • 2014-07-13
        相关资源
        最近更新 更多