我在这里可能遗漏了一个重点,但是我知道记录器在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()方法之前,是否只有一种方法可以使生效的“默认”记录器生效?
答案 0 :(得分:1)
我强烈建议创建2个静态类UILog
和DefaultLogger
,在这里您可以简单地将它们称为UILog.Log("your_message")
,日志类将如下所示:
private static Logger logger = LogManager.GetLogger("your_logger");
public static void Log(string message){
Logger.Log.Error(message);
}
我认为让记录器具有名称并使用适当的方法为每个记录器创建类是一个好习惯。
答案 1 :(得分:1)
我在这里可能遗漏了一个要点,但是我知道记录器是在NLog.config中定义的,并且目标也是在NLog.config中定义的。
这不是完全正确的。在NLog.config中定义了目标和规则,而不是记录器。
您可能会遇到类似这样的事情:
<rules>
<logger name="*" writeTo="myTarget" />
</rules>
这意味着定义一个规则,该规则对名称与通配符*
匹配的记录器进行数学运算。
我的问题是:如何将记录仪恢复到之前的值
还是保存Logger
实例,或者使用LogManager.GetCurrentClassLogger()
?另请注意,Logger
具有Name
属性。
还请注意,“放回”听起来不是线程安全的。如果需要线程安全,则建议使用单独的记录器实例(由Antonios Katopodis建议)。