完全从.NET Core 2.0 Web API中删除控制台日志记录

4

我做了这个:

public static IWebHost BuildWebHost(string[] args)
{
    return WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .UseUrls("http://0.0.0.0:5000")
        .ConfigureLogging(ConfigureLogging)
        .Build();
}

private static void ConfigureLogging(WebHostBuilderContext hostingContext, ILoggingBuilder logging)
{   
    logging.ClearProviders();
}

以下是我的appsettings.json文件:

{

}

但是..我仍然会在Console中记录异常 - 有人能解释一下为什么吗?指点一下?

Exception is still logged to Console


在构建 Web 主机时调用,已更新答案。 - Marcus
我想使用 Serilog,但目前还没有使用。第一步是从框架/CLR/Kestrel中删除所有日志记录,然后我将仅添加Serilog Json日志记录。 - Marcus
你能分享更多关于你的应用程序的信息吗?也许可以展示一下打印到控制台的日志(以确认这些是实际的日志条目)?我现在无法复制你的问题。 - poke
我不能透露更多的信息,因为我受到法律义务的约束。但是,我已经更新了我的答案,并强制抛出了一个异常来输出结果。 - Marcus
1
你能否在命令行中运行应用程序,而不是在Visual Studio中运行?此外,如果您无法分享更多信息并且无法在[mcve]中重现问题,那么恐怕我们无法帮助您。 - poke
显示剩余2条评论
2个回答

2
您可以在创建Web主机时像这样配置日志记录。
 private static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
                .ConfigureLogging(config => {
                    config.ClearProviders();
                })
                .UseKestrel()
                .UseStartup<Startup>();

config.ClearProviders()会移除所有的日志服务,只产生最少的信息。

0

框架有一个默认的ILoggerFactory,如果没有注册,则会使用它。

当您添加UseSerilog()时,这将替换默认工厂,并且默认控制台日志记录将消失。


你可能是指 AddSerilog 吧?但是即使我这样做:logging.AddSerilog(logger, true); logging.SetMinimumLevel(LogLevel.None);,我仍然会在控制台上收到异常。 - Marcus
框架只有一个由 Web 主机创建的日志记录器工厂,其中附加了日志提供程序。在 Web 主机构建器中调用 loggerBuilder.ClearProviders() 的 OP 所采用的方式应该能够正确清除所有默认提供程序,使得所有日志都进入虚空。根据你所指的 UseSerilog() 是什么意思,这 不应该 清除现有的提供程序。 - poke
@Marcus 不用了;https://github.com/serilog/serilog-aspnetcore 已经取代了旧的兼容库,现在提供 UseSerilog() 而不是 AddSerilog() - 那边的 README 应该会有帮助。 - Nicholas Blumhardt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接