首页 > 解决方案 > 日志从未调用自定义 ILogger/ILogProvider 实现

问题描述

我已经实现了一个自定义日志记录系统,一切似乎都按预期工作,但是,在我的自定义实现Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)中从未调用过。ILogger

我一直按照这里的说明进行操作,此时我已经翻阅了大约 20 次指南,似乎找不到任何会导致此方法不被调用的内容。我还浏览了内置 .NET 控制台记录器的源代码,但一切似乎都与我已经实现的一致。

我已经用断点跟踪了我的代码,并且ILoggerProvider正在调用我的自定义。CreateLogger正如我所期望的那样,它多次在我的自定义提供程序上执行该方法。它还IsEnabled在 my 上一次调用该方法ILogger(这是public bool IsEnabled(LogLevel logLevel) => true;为了测试而实现的)。但是,即使我在下一行有一个断点并且该断点实际上已被击中,它也永远不会在 my 上调用该Log<TState>方法。ILogger

_logger.LogInformation("Running health check");哪里_logger是 DI 引用ILogger<HealthCheckMasterDatabase> logger

是否有关于实施我可能忽略的自定义日志系统的“陷阱”?

标签: asp.net-web-api.net-5

解决方案


遇到同样的错误,可能是由于配置中的记录器过滤器。

解决方案:

(1)您可以在appsettings.xx.json中删除以下配置“Logging”

(2) 或者,不删除它,在“LogLevel”中为您的自定义记录器提供程序添加一个新项目。

在此处输入图像描述


推荐阅读