Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有办法通过变量设置NLog记录器的最低级别?_Nlog - Fatal编程技术网

是否有办法通过变量设置NLog记录器的最低级别?

是否有办法通过变量设置NLog记录器的最低级别?,nlog,Nlog,使用NLog v4.4.12,我的App.config中有这个 下面是我的Variables.xml文件内容 但我在启动我的应用程序时遇到了一个例外 Unknown log level: ${logLevel} 我是做错了什么还是根本不可能 这样做的目标是最终为每个需要记录事情的项目创建一个xml文件,这样每个项目都可以有自己的minlevel,并能够在运行时通过该xml版本对其进行更改 编辑:在抛出异常之前添加此代码表明我的变量具有所需的值 var nl = NLog.LogManager.

使用NLog v4.4.12,我的App.config中有这个

下面是我的Variables.xml文件内容

但我在启动我的应用程序时遇到了一个例外

Unknown log level: ${logLevel}
我是做错了什么还是根本不可能

这样做的目标是最终为每个需要记录事情的项目创建一个xml文件,这样每个项目都可以有自己的minlevel,并能够在运行时通过该xml版本对其进行更改

编辑:在抛出异常之前添加此代码表明我的变量具有所需的值

var nl = NLog.LogManager.Configuration;
if (nl != null)
{
    if (nl.Variables.ContainsKey("logLevel"))
    {
            Console.WriteLine(nl.Variables["logLevel"]);
    }
}
**最新答案** NLog版本。4.6增加了对在minLevel中使用NLog配置变量的支持。看

NLog版本。4.6.7通过修改NLog配置变量和调用ReconfigeExistingLogger,增加了对运行时调整minLevel的支持。看

**原始答案** 不幸的是,您不能在minLevel、level等属性中使用布局渲染器${…}

有两种选择:

使用过滤器 缺点:

可读性较差 与minLevel属性相比,对性能的伤害更大 更改代码中的规则 var rule=config.LoggingRules[0]; //禁用旧级别,启用新级别 rule.disableloggingforleveloglevel.Debug; rule.DisableLoggingForLevelLogLevel.Trace; rule.enablegloggingforlevelsloglevel.Info,LogLevel.Fatal; //应用配置 LogManager.Configuration=config; **最新答案** NLog版本。4.6增加了对在minLevel中使用NLog配置变量的支持。看

NLog版本。4.6.7通过修改NLog配置变量和调用ReconfigeExistingLogger,增加了对运行时调整minLevel的支持。看

**原始答案** 不幸的是,您不能在minLevel、level等属性中使用布局渲染器${…}

有两种选择:

使用过滤器 缺点:

可读性较差 与minLevel属性相比,对性能的伤害更大 更改代码中的规则 var rule=config.LoggingRules[0]; //禁用旧级别,启用新级别 rule.disableloggingforleveloglevel.Debug; rule.DisableLoggingForLevelLogLevel.Trace; rule.enablegloggingforlevelsloglevel.Info,LogLevel.Fatal; //应用配置 LogManager.Configuration=config;
我将变量作为Service Fabric应用程序的一部分保存在配置文件中,该应用程序因环境而异,并希望这些变量覆盖Nlog.config文件中的值。 正如上面的用户所说,当我希望为loglevel设置最低级别时,我遇到了与loglevel相同的问题。我没有硬编码代码中的级别,而是创建了一个变量从配置文件中检索值,与原始用户所做的相同:

var config = context.CodePackageActivationContext.GetConfigurationPackageObject("Config");
ILoggerFactory logger = new LoggerFactory().AddNLog();
var nlogConfigSection = config.Settings.Sections["MyService_NlogSettings"];
我使用GlobalDiagnosticsContext设置了可以设置的变量,例如连接字符串等,但是显然不能这样设置loglevel,因为它不喜欢变量

因此,我采取了以下措施:

LogManager.Configuration.LoggingRules[0].SetLoggingLevels((NLog.LogLevel.FromString(nlogConfigSection.Parameters["AzureNLogLevel"].Value)),
                       NLog.LogLevel.FromString("Fatal"));  

“SetloggingLevels”方法需要日志记录的Minlevel和MaxLevel的值,因此我的配置值是min,而我硬编码Fatal为max,因为我是在复制“Minlevel”类型日志记录之后,虽然很明显这也可以在我的配置文件中设置

我将变量作为服务结构应用程序的一部分保存在配置文件中,该应用程序因环境而异,并希望这些变量覆盖Nlog.config文件中的值。 正如上面的用户所说,当我希望为loglevel设置最低级别时,我遇到了与loglevel相同的问题。我没有硬编码代码中的级别,而是创建了一个变量从配置文件中检索值,与原始用户所做的相同:

var config = context.CodePackageActivationContext.GetConfigurationPackageObject("Config");
ILoggerFactory logger = new LoggerFactory().AddNLog();
var nlogConfigSection = config.Settings.Sections["MyService_NlogSettings"];
我使用GlobalDiagnosticsContext设置了可以设置的变量,例如连接字符串等,但是显然不能这样设置loglevel,因为它不喜欢变量

因此,我采取了以下措施:

LogManager.Configuration.LoggingRules[0].SetLoggingLevels((NLog.LogLevel.FromString(nlogConfigSection.Parameters["AzureNLogLevel"].Value)),
                       NLog.LogLevel.FromString("Fatal"));  

“SetloggingLevels”方法需要日志记录的Minlevel和MaxLevel的值,因此我的配置值是min,而我硬编码Fatal为max,因为我是在复制“Minlevel”类型日志记录之后,虽然很明显这也可以在我的配置文件中设置

你能试试minlevel=${var:logLevel}吗?在它前面放一个var:。变量可能仅用于布局。可能使用筛选器:已尝试在变量名称前面使用var:。我将在假期后尝试使用筛选器,并将发回。可能重复:您可以尝试minlevel=${var:logLevel}吗?在它前面放一个var:。变量可能仅用于布局。可能使用筛选器:已尝试在变量名称前面使用var:。我将在假期后尝试使用过滤器,并将发回。可能重复:谢谢@Julian!最后,我使用了过滤器方法。我认为在我们的案例中,性能不会是一个很大的问题。有什么理由我们不能在这个特定的案例中使用变量吗?尽管如此,性能
只读变量不会影响performanceThanks@Julian!最后,我使用了过滤器方法。我认为性能在我们的例子中不会是一个很大的问题。有什么理由我们不能在这种特殊情况下使用变量吗?性能,尽管只读变量不会影响性能