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

NLog: how to obtain level of a specific target programatically

我目前使用 NLog 并允许管理员用户在运行时使用变量设置级别,如下所示:

<logger name="*" minLevel="${var:myFileLevel}" writeTo="file" />

我想知道这个logger在运行时的级别(由于变量的原因我无法从配置文件中获取)

我可以很容易的得到目标如下:

Target target= LogManager.Configuration.FindTargetByName("file");

可惜目标对象上没有相关方法获取关卡。是否可以在运行时获取日志级别?

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

所以你可以这样做:

  1. 添加一个规则名称,这样您就可以更轻松地找到规则:

    <logger name="*" minLevel="${var:myFileLevel}" writeTo="file" ruleName="myrule" />
    
  2. 找到规则并检查 Levels 属性。参见 LoggingConfiguration.FindRuleByName Method

    var rule = LogManager.Configuration.FindRuleByName("myrule");
    var levels = rule.Levels;  // enabled levels
    

对于这种情况,另一种选择是读取 myFileLevel 变量值。为此,您需要渲染它,您可以为此使用 LogEventInfo.CreateNullEvent()

var myFileLevelLayout = LoggingConfiguration.Variables["myFileLevel"]; // Type SimpleLayout
string value = myFileLevelLayout.Render(LogEventInfo.CreateNullEvent())


LoggingConfiguration.Variables属性