首页 > 解决方案 > 使用 NLog GetLogger 切换回默认记录器

问题描述

我可能在这里遗漏了一个重点,但我知道记录器是在中定义的,NLog.config并且目标也是在NLog.config.

我正在使用一个名为“*”的记录器作为我的记录器。因此,当我想记录错误时,我会执行以下操作:

Logger.Log.Error("Oops.");

该代码写入我的记录器指定用于级别“错误”的目标。它写入一个名为“Error.log”的文件。美好的。

对于我的任何影响 UI 的代码(此代码分布在多个类中),我有时想登录到 UI.txt 文件。所以我创建了一个名为“UI”的记录器,它指定了一个对应于已定义目标的 writeTo 值。美好的。

在调用 .Log 方法之前,我使用 GetLogger 方法来获取 UI 记录器:

NLog.LogManager.GetLogger("UI");

然后,当我使用此命令时,它会写入 UI 目标(名为 UI.log 的文件):

Logger.Log.Error("Oops.");

我的问题是:如何将记录器恢复到以前的值,以便下次使用 Logger.Log.Error 方法时,它会写入 Error.log 而不是 UI.log?我希望我需要使用这样的另一行,但我不知道用什么来代替???:

NLog.LogManager.GetLogger("???");

我查阅了文档,没有看到任何可以帮助我理解传递给 GetLogger 以切换回默认记录器的参数的任何内容。即使传递“*”有效,它也可能比我需要/希望它做的更多。在您调用 GetLogger() 方法之前,有没有办法让“默认”记录器生效?

标签: c#nlog

解决方案


我可能在这里遗漏了一个重点,但我知道记录器是在 NLog.config 中定义的,而目标也在 NLog.config 中定义。

这并不完全正确。在 NLog.config 中定义了目标和规则,而不是记录器。

你可能会有这样的事情:

<rules>
    <logger name="*" writeTo="myTarget" />
</rules>

这意味着,定义一个规则来计算名称与通配符匹配的记录器*

我的问题是:如何将记录器恢复到以前的值

或者保存Logger实例,或者使用LogManager.GetCurrentClassLogger()? 另请注意,酒店Logger拥有一处Name房产。

请注意,“放回”听起来不是线程安全的。如果您需要线程安全,建议使用单独的记录器实例(由 Antonios Katopodis 建议)。


推荐阅读