c# - 使用 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() 方法之前,有没有办法让“默认”记录器生效?
解决方案
我可能在这里遗漏了一个重点,但我知道记录器是在 NLog.config 中定义的,而目标也在 NLog.config 中定义。
这并不完全正确。在 NLog.config 中定义了目标和规则,而不是记录器。
你可能会有这样的事情:
<rules>
<logger name="*" writeTo="myTarget" />
</rules>
这意味着,定义一个规则来计算名称与通配符匹配的记录器*
。
我的问题是:如何将记录器恢复到以前的值
或者保存Logger
实例,或者使用LogManager.GetCurrentClassLogger()
? 另请注意,酒店Logger
拥有一处Name
房产。
请注意,“放回”听起来不是线程安全的。如果您需要线程安全,建议使用单独的记录器实例(由 Antonios Katopodis 建议)。
推荐阅读
- javascript - How to remove class active from multiple active li (multiselect li)
- python - 是否可以动态分配字段类型 - Django Form?
- react-native - AsyncStorage 在 react-native-web 上工作,在 ios 上失败(字符串化 json 数据)
- python - How to fix Module Not Found Error: No module named 'keras'when the module absolutly has been installed
- swift - 数组没有在 Swift 中更新
- node.js - How can you store the output of a promise into a variable?
- python-3.x - 为多列更改整列中的日期格式
- javascript - 使用 JQuery 访问按钮值
- node.js - Concatenating multiple mp4 files with FFMPEG is giving buggy output file
- c# - 在 Unity 中根据方向启用和禁用碰撞器