自带Logging使用
- Logging是Core框架自带的日志记录框架
简单使用Logging
配置文件
{
"Logging": {
"Debug": {
"LogLevel": {
"Default": "Information"
}
},
"Console": {
"IncludeScopes": false,
"LogLevel": {
"Microsoft.AspNetCore.Mvc.Razor.Internal": "Warning",
"Microsoft.AspNetCore.Mvc.Razor.Razor": "Debug",
"Microsoft.AspNetCore.Mvc.Razor": "Error",
"Default": "Information"
}
},
"LogLevel": {
"Default": "Debug"
}
}
}
配置Logging
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole();
});
使用
- 先依赖注入接收实例
private readonly ILogger _logger;
public HomeController(ILogger<HomeController> logger)
{
this._logger = logger;
}
- 再直接使用
public IActionResult Index()
{
_logger.LogError("Error-----------11111111111111111");
Thread.Sleep(3000);
_logger.LogInformation("Info------------2222222222222");
Thread.Sleep(3000);
_logger.LogDebug("Debug-----------333333333333333");
Thread.Sleep(3000);
_logger.LogWarning("Warning-----------------44444444444444");
return Content("success");
}
- 运行结果
- 注意:Program中使用Logging直接获取服务 不需要依赖注入
public static void Main(string[] args)
{
var host = CreateWebHostBuilder(args).Build();
var logger = host.Services.GetRequiredService<ILogger<Program>>();
logger.LogInformation("Seeded the database.");
host.Run();
}
- 设置日志ID
_logger.LogWarning(LoggingEvents.GetItemNotFound, "Index-----------5555555555");
- LoggingEvents定义 这部分可以自己定义记录日志的严重性
public class LoggingEvents
{
public const int GenerateItems = 1000;
public const int ListItems = 1001;
public const int GetItem = 1002;
public const int InsertItem = 1003;
public const int UpdateItem = 1004;
public const int DeleteItem = 1005;
public const int GetItemNotFound = 4000;
public const int UpdateItemNotFound = 4001;
}
- 运行测试
- 在代码中设置筛选级别
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole();
logging.AddFilter("System", LogLevel.Debug).AddFilter<DebugLoggerProvider>("Microsoft", LogLevel.Trace);
});
如何应用筛选规则
选择筛选规则的算法
- 选择匹配提供程序或其别名的所有规则。 如果找不到任何匹配项,则选择提供程序为空的所有规则。
- 根据上一步的结果,选择具有最长匹配类别前缀的规则。 如果找不到任何匹配项,则选择未指定类别的所有规则。
- 如果选择了多条规则,则采用最后一条 。
- 如果未选择任何规则,则使用 MinimumLevel。
简单来说 就是在生成ILogger实例的时候 查找筛选规则 先找规则命名最具体的 如果都没有匹配的就按照未指定类别的规则 如果也没有就用系统默认的 如果定义了多条就使用最后一条