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

How to trap ILogger.LogCritical call and break in debugger?

当有人写 Microsoft.Extensions.Logging.ILogger.LogCritical() 电话时,一定发生了一些严重的事情。我希望它会在调试器中 运行 时(记录关键和)中断。我试过 How to override an existing extension method 的答案,它需要使用特殊的命名空间。但是我希望大家能自然的使用LogCritical(),不用再去纠结是调用原来的LogCritical()还是我的坑

我能想到的唯一方法是用我的替换后备日志记录库,并使用我的中断逻辑将调用重定向到日志记录库。但是这个工具仅限于指定的库。如果我以后想换库,我需要再实现一个。并实现它需要的所有无聊接口,只是为了一些LogCritical()相关的破坏逻辑。

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

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

   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