如何使用NLog登录到具有不同日志记录级别的多个目标?

时间:2011-10-27 13:17:29

标签: logging target nlog

我遇到了那里描述的同一个问题: Another StackOverflow Question

我需要登录文件和方法调用。 问题是有很多“调试”级别的日志消息更加详细。 我需要他们登录到文件。但该方法应仅接收高于调试级别的日志消息。

所以SplitGroupTarget没有满足我的要求。 这个问题有什么解决方案或解决方法吗?

此外,我在NLog论坛中发现这个条目在2006年出现了类似的问题 - 但尚无答案:NLog Forum

EDIT1:我忘了提到我想以编程方式配置它。 根据你的回答我用以下方式尝试了它,但只记录了最后一个目标。

SimpleConfigurator.ConfigureForTargetLogging(methodCallTarget, LogLevel.Debug);
SimpleConfigurator.ConfigureForTargetLogging(fileTarget, LogLevel.Debug);

3 个答案:

答案 0 :(得分:3)

我刚刚找到了以编程方式记录多个目标的解决方案。

我只是不使用SimpleConfigurator,而是使用LogManagerNLog.LoggingConfiguration设置为其属性。

所以我发布了以下代码片段:

// define the targets
// ......

// create configuration object and set previously created targets
LoggingConfiguration configuration = new LoggingConfiguration();
configuration.AddTarget("methodCall", methodCallTarget);
configuration.AddTarget("logfile", fileTarget);

// create logging rules where i can specify the minimum log levels
// and add them to the configuration objects LoggingRules Enumerable.
LoggingRule logFileRule = new LoggingRule("*", NLog.LogLevel.Debug, fileTarget);
configuration.LoggingRules.Add(logFileRule);

LoggingRule methodCallRule = new LoggingRule("*", NLog.LogLevel.Info, methodCallTarget);
configuration.LoggingRules.Add(methodCallRule);

// Finally set the configuration object to the LogManagers Configuration property
LogManager.Configuration = configuration;

感谢您的回答!

答案 1 :(得分:1)

SimpleConfigurator会覆盖所有现有规则。在您的示例中,您有2个调用,因此第一个目标被丢弃。相反,您应该manually add a target and logging rule

答案 2 :(得分:0)

您应该能够指定相同的记录器并将其发送到两个不同的目标。

假设您已为文件配置了目标"f1",并为方法配置了"m1",您应该能够像这样配置记录器:

<logger name="*" minlevel="Trace" writeTo="f1" />  
<logger name="*" minlevel="Debug" writeTo="m1" />  

这应该将所有日志消息发送到文件目标f1,并将所有Debug和更高消息发送到方法目标m1

另外,有关配置NLog的更多信息,请参阅此question and its answers。你可能会发现一些有用的东西。

我刚用谷歌搜索,发现这篇文章似乎描述了你的问题和解决方案:

http://nlog-forum.1685105.n2.nabble.com/Programatic-Configuration-of-targets-and-rules-td1685349.html

也许会有所帮助。