NLog:如何以编程方式获取特定目标的级别

she*_*ira 4 c# nlog

我目前使用 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)

但不幸的是,目标对象上没有相关方法来获取级别。是否可以在运行时获取日志级别?

Jul*_*ian 6

启用的日志记录级别在日志记录规则中配置。

所以你可以这样做:

  1. 添加规则名称,以便您可以更轻松地找到规则:

    <logger name="*" minLevel="${var:myFileLevel}" writeTo="file" ruleName="myrule" />
    
    Run Code Online (Sandbox Code Playgroud)
  2. 找出规律并检查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 属性