【问题标题】:NLog: how to obtain level of a specific target programaticallyNLog:如何以编程方式获取特定目标的级别
【发布时间】:2020-12-21 13:24:33
【问题描述】:

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

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

我想知道这个记录器在运行时的级别(所以我无法从配置文件中获取它,因为变量)

我可以通过以下方式轻松获得目标:

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

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

【问题讨论】:

  • 为什么不检查Logger.IsEnabled(logLevel) 或特定的Logger.Is*Enabled 属性?这使您可以确定为任何给定记录器配置的内容。
  • @Dennis :我试过了,但如果您在不同级别配置了多个目标,它会失败。接受的解决方案正是我所需要的。

标签: c# nlog


【解决方案1】:

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

所以你可以这样做:

  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 Property

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 2020-05-21
    • 1970-01-01
    相关资源
    最近更新 更多