我目前使用 NLog 并允许管理员用户使用变量在运行时设置级别,如下所示:
<logger name="*" minLevel="${var:myFileLevel}" writeTo="file" />
Run Code Online (Sandbox Code Playgroud)
我想知道这个记录器在运行时的级别(所以由于变量我无法从配置文件中获取它)
我可以轻松获得目标,如下所示:
Target target= LogManager.Configuration.FindTargetByName("file");
Run Code Online (Sandbox Code Playgroud)
但不幸的是,目标对象上没有相关方法来获取级别。是否可以在运行时获取日志级别?
启用的日志记录级别在日志记录规则中配置。
所以你可以这样做:
添加规则名称,以便您可以更轻松地找到规则:
<logger name="*" minLevel="${var:myFileLevel}" writeTo="file" ruleName="myrule" />
Run Code Online (Sandbox Code Playgroud)
找出规律并检查Levels属性。请参阅LoggingConfiguration.FindRuleByName 方法
<logger name="*" minLevel="${var:myFileLevel}" writeTo="file" ruleName="myrule" />
Run Code Online (Sandbox Code Playgroud)
对于这种情况,另一个选择是读取myFileLevel变量值。为此,您需要渲染它,您可以使用LogEventInfo.CreateNullEvent()它。
var rule = LogManager.Configuration.FindRuleByName("myrule");
var levels = rule.Levels; // enabled levels
Run Code Online (Sandbox Code Playgroud)
请参阅
LoggingConfiguration.Variables 属性