我遇到了那里描述的同一个问题: Another StackOverflow Question
我需要登录文件和方法调用。 问题是有很多“调试”级别的日志消息更加详细。 我需要他们登录到文件。但该方法应仅接收高于调试级别的日志消息。
所以SplitGroupTarget没有满足我的要求。 这个问题有什么解决方案或解决方法吗?
此外,我在NLog论坛中发现这个条目在2006年出现了类似的问题 - 但尚无答案:NLog Forum
EDIT1:我忘了提到我想以编程方式配置它。 根据你的回答我用以下方式尝试了它,但只记录了最后一个目标。
SimpleConfigurator.ConfigureForTargetLogging(methodCallTarget, LogLevel.Debug);
SimpleConfigurator.ConfigureForTargetLogging(fileTarget, LogLevel.Debug);
答案 0 :(得分:3)
我刚刚找到了以编程方式记录多个目标的解决方案。
我只是不使用SimpleConfigurator
,而是使用LogManager
将NLog.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。你可能会发现一些有用的东西。
我刚用谷歌搜索,发现这篇文章似乎描述了你的问题和解决方案:
也许会有所帮助。