说明:本篇简单说一下日志中常用的几个点,关于日志,后面重点会说到三方日志提供程序
在MiniAPI中,可以通过方法或构造函数中,获取框架自动注入的日志类型,如下方式:
app.MapGet("/test", (ILogger<Program> logger) =>
{logger.LogInformation(new EventId(1234), "Information");return "ok";
});
public class LogDemoService
{private readonly ILogger<LogDemoService> _logger;public LogDemoService(ILogger<LogDemoService> logger){_logger = logger;}public void Demo01(){_logger.LogInformation("demo01");}
}
日志的级别:
public enum LogLevel{Trace, Debug,Information,Warning,Error,Critical,None}
Trace
= 0、Debug
= 1、Information
= 2、Warning
= 3、Error
= 4、Critical
= 5 和 None
= 6。日志级别对应的方法:LogTrace(),LogDebug(),LogInformation(),LogWarning(),LogError(),LogCritical()。
日志配置:
当ASPNETCORE_ENVIRONMENT环境变量配置不同时,asp.net core会读取不同的配置文件,当在vs中进行开发时,通常这个变量值为Development,开发环境下的日志配置,appsettings.Development.json
"Logging": {"LogLevel": {"Default": "Debug","Microsoft.AspNetCore": "Warning"}
生产环境下的日志配置,appsettings.json
"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}}
Logging下的第一级通常是日志提供程序,内置的提供程序有
控制台
调试
EventSource
EventLog
AzureAppServicesFile
AzureAppServicesBlob
ApplicationInsights
比如控制台提供程序配置如下,IncludeScopes是否日志在输出时带有作用域信息,LogLevel是不同类别的日志输出级别,比如默认的是Information和以上的级别才会输出到控件台上,Microsoft.AspNetCore是警告级别和以上的才会输出,而我自定义的MiniAPICourse.Sevices是Debug和以上的级别都会输出,利用这个设置可以重点输出自己开发功能的低级别日志。
"Logging": {"Console": {"IncludeScopes": true,"LogLevel": {"Microsoft.AspNetCore": "Warning","Default": "Information","MiniAPICourse.Services": "Debug" }}}
如果在日志配置中直接写LogLevel,则应用到所有日志提供程序,如appsettings.Development.json和appsettings.json中的写法。
日志类别:
在从服务容器获取日志时,要带上当前所在的类名,如LogDemoService,就是当前日志的类别,所有使用这个_logger的输出,都带有这个类型的名称。
private readonly ILogger<LogDemoService> _logger;
关于上图中类型后面的[0],就是日志事件ID,可以输出日志是填上。