您可以发现, 日志被输出了两遍, 这是因为WebHost.CreateDefaultBuilder方法里面已经配置使用了AddConsole()方法, 我再配置一遍的话就相当于又添加了一个输出到控制台的日志提供商.
所以, 我可以不采用这个构建模式创建IWebHost, 改为直接new一个:
这样就正确了. 可以看到日志信息的第一行内容是一样的, 第二行是各自的日志信息.
日志的过滤
我们可以为整个程序设定日志记录的最低级别, 也可以为某个日志提供商和分类指定特定的过滤器.
设置全局最低记录日志的级别使用SetMinimumLevel()扩展方法:
如果想完全不输出日志的话, 可以把最低记录的级别设为LogLevel.None.
我们还可以为不同场景设置不同的最低记录级别:
然后分别建立这两个分类的logger, 并记录:
查看输出结果, 已经按配置进行了过滤:
这里可以使用完整的类名作为分类名:
然后使用ILogger<T>即可:
针对上面这个例子, 我们还可以使用配置文件:
相应的, 代码也需要改一下:
输出的效果是一样的.
日志提供商
ASP.NET Core 内置了6个日志提供商:
Console, 使用logging.AddConsole()来启用.
Debug, 使用logging.AddDebug()来启用. 它使用的是System.Diagnostics.Debug的Debug.WriteLine()方法, 由于Debug类的所有成员都是被[Conditional("DEBUG")]修饰过了, 所以无法被构建到Release Build里, 也就是生产环境是无法输出的, 除非你把Debug Build作为部署到生产环境