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");
可惜目标对象上没有相关方法获取关卡。是否可以在运行时获取日志级别?
启用的日志记录级别在日志记录规则中配置。
所以你可以这样做:
添加一个规则名称,这样您就可以更轻松地找到规则:
<logger name="*" minLevel="${var:myFileLevel}" writeTo="file" ruleName="myrule" />
找到规则并检查 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())
我目前使用 NLog 并允许管理员用户在运行时使用变量设置级别,如下所示:
<logger name="*" minLevel="${var:myFileLevel}" writeTo="file" />
我想知道这个logger在运行时的级别(由于变量的原因我无法从配置文件中获取)
我可以很容易的得到目标如下:
Target target= LogManager.Configuration.FindTargetByName("file");
可惜目标对象上没有相关方法获取关卡。是否可以在运行时获取日志级别?
启用的日志记录级别在日志记录规则中配置。
所以你可以这样做:
添加一个规则名称,这样您就可以更轻松地找到规则:
<logger name="*" minLevel="${var:myFileLevel}" writeTo="file" ruleName="myrule" />
找到规则并检查
Levels
属性。参见 LoggingConfiguration.FindRuleByName Methodvar 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())