如何捕获ILogger.LogCritical调用并在调试器中中断?

时间:2019-09-09 07:39:28

标签: c# debugging .net-core nlog ilogger

当某人写一个Microsoft.Extensions.Logging.ILogger.LogCritical()呼叫时,肯定发生了一些严重的事情。我希望它在调试器中运行时(日志严重且中断)。我尝试了How to override an existing extension method的答案,它需要使用特殊的命名空间。但是,我希望每个人都可以自然使用LogCritical(),而无需仔细检查它是在调用原始LogCritical()还是被困的那个。

我能想到的唯一方法是用我的替换日志记录库,并使用中断逻辑将调用重定向到日志记录库。但是该工具仅限于指定的库。如果将来要更改库,则需要实施另一个库。并为一些LogCritical()相关的中断逻辑实现所需的所有无聊接口。

因此,我希望捕获一般的ILogger.LogCritical()调用,而不是底层的具体调用。这可能吗?

1 个答案:

答案 0 :(得分:1)

不确定要寻找什么。但也许是这样的:

   var logFactory = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config");
   #if DEBUG
   var debugBreakTarget = new NLog.Targets.MethodCallTarget("DebugBreak", (logEvent,parms) => System.Diagnostics.Debugger.Break());
   var debugBreakRule = new NLog.Config.LoggingRule("*", NLog.Level.Fatal, debugBreakTarget);
   logFactory.Configuration.LoggingRules.Insert(0, debugBreakRule);
   logFactory.ReconfigExistingLoggers();
   #endif
   var logger = logFactory.GetCurrentClassLogger();

由于已将NLog标签添加到问题中,因此显示NLog特定解决方案。

另请参阅:https://github.com/NLog/NLog/wiki/MethodCall-target