【发布时间】:2020-11-26 13:31:45
【问题描述】:
我正在尝试使用多个 final 规则将带有 NLog 的消息记录到多个目标。
情况
NLog 版本:4.7.5
平台:.NET CORE 3.1
配置:XML File 和 configured programmatically
我有 2 个目标 File 和 Console
LogManager.Configuration.AddTarget(fileTarget);
LogManager.Configuration.AddTarget(consoleTarget);
还有多个规则,比如
new LoggingRule() {LoggerNamePattern = "A*", Target = fileTarget, MinLevel = Warn, Final = true};
new LoggingRule() {LoggerNamePattern = "A.Lot*", Target = fileTarget, MinLevel = Warn, Final = true};
new LoggingRule() {LoggerNamePattern = "A.Lot.Of*", Target = fileTarget, MinLevel = Info, Final = true};
new LoggingRule() {LoggerNamePattern = "A.Lot.Of.Hierarchical*", Target = fileTarget, MinLevel = Info, Final = true};
new LoggingRule() {LoggerNamePattern = "A.Lot.Of.Hierarchical.Rules*", Target = fileTarget, MinLevel = Debug, Final = true};
new LoggingRule() {LoggerNamePattern = "A*", Target = consoleTarget, MinLevel = Warn, Final = true};
new LoggingRule() {LoggerNamePattern = "A.Lot*", Target = consoleTarget, MinLevel = Warn, Final = true};
new LoggingRule() {LoggerNamePattern = "A.Lot.Of*", Target = consoleTarget, MinLevel = Warn, Final = true};
new LoggingRule() {LoggerNamePattern = "A.Lot.Of.Hierarchical*", Target = consoleTarget, MinLevel = Warn, Final = true};
new LoggingRule() {LoggerNamePattern = "A.Lot.Of.Hierarchical.Rules*", Target = consoleTarget, MinLevel = Trace, Final = true};
我知道Target 和MinLevel 不是有效属性,但它更容易显示
Rules 必须是final,否则我的所有日志消息都是重复的。
编辑:用户可以在运行时为每个rule 和每个target 更改LogLevel。
问题
当我创建一个新的rule 时,我必须为此rule 设置targets。当我将多个targets 添加到一个规则时,我会在每个目标中收到消息但我只能为targets 定义LogLevel。当我添加rule 两次时,每个rule 有一个target,然后我只在控制台中而不是在文件中获取消息,因为final 停止了另一个rules。
我已经检查了 NLog 页面、NLog GitHub 和 StackOverflow 页面。他们所有的问题都是如何登录到多个目标,或者使用不同的规则登录到多个目标,但每个目标只有一个规则。
预期
为每个目标定义多个final rules 和不同的LogLevel
【问题讨论】:
标签: nlog asp.net-core-3.1