当某人写一个Microsoft.Extensions.Logging.ILogger.LogCritical()
呼叫时,肯定发生了一些严重的事情。我希望它在调试器中运行时(日志严重且中断)。我尝试了How to override an existing extension method的答案,它需要使用特殊的命名空间。但是,我希望每个人都可以自然使用LogCritical()
,而无需仔细检查它是在调用原始LogCritical()
还是被困的那个。
我能想到的唯一方法是用我的替换日志记录库,并使用中断逻辑将调用重定向到日志记录库。但是该工具仅限于指定的库。如果将来要更改库,则需要实施另一个库。并为一些LogCritical()
相关的中断逻辑实现所需的所有无聊接口。
因此,我希望捕获一般的ILogger.LogCritical()
调用,而不是底层的具体调用。这可能吗?
答案 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特定解决方案。