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"
}
}
}
此json创建6条筛选规则 Debug用于调试程序 Console用于控制台程序 其中LogLevel设置了logging最低日志级别前三条分别为指定程序集设定logging级别 未匹配的按照Default设置的最低级别 IncludeScopes配置是否启用作用域 LogLevel设置了所有的程序 创建logging对象时自动为每个提供程序选择一个规则
配置Logging
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup()
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole();
});
使用
先依赖注入接收实例
private readonly ILogger _logger;
public HomeController(ILogger 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>();
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()
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole();
logging.AddFilter("System", LogLevel.Debug).AddFilter("Microsoft", LogLevel.Trace);
});
如何应用筛选规则
先前示例中显示的配置数据和 AddFilter
代码会创建下表所示的规则。 前六条由配置示例创建,后两条由代码示例创建
选择筛选规则的算法
MinimumLevel
。简单来说 就是在生成ILogger实例的时候 查找筛选规则 先找规则命名最具体的 如果都没有匹配的就按照未指定类别的规则 如果也没有就用系统默认的 如果定义了多条就使用最后一条
提供程序别名
每个提供程序都定义了一个别名;可在配置中使用该别名来代替完全限定的类型名称 。 对于内置提供程序,请使用以下别名:
代码中设置最低级别
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup()
.ConfigureLogging(logging => logging.SetMinimumLevel(LogLevel.Warning));
系统类别和级别
下面是 ASP.NET Core 和 Entity Framework Core 使用的一些类别,备注中说明了可从这些类别获取的具体日志:
类别 | 说明 |
---|---|
Microsoft.AspNetCore | 常规 ASP.NET Core 诊断。 |
Microsoft.AspNetCore.DataProtection | 考虑、找到并使用了哪些密钥。 |
Microsoft.AspNetCore.HostFiltering | 所允许的主机。 |
Microsoft.AspNetCore.Hosting | HTTP 请求完成的时间和启动时间。 加载了哪些承载启动程序集。 |
Microsoft.AspNetCore.Mvc | MVC 和 Razor 诊断。 模型绑定、筛选器执行、视图编译和操作选择。 |
Microsoft.AspNetCore.Routing | 路由匹配信息。 |
Microsoft.AspNetCore.Server | 连接启动、停止和保持活动响应。 HTTP 证书信息。 |
Microsoft.AspNetCore.StaticFiles | 提供的文件。 |
Microsoft.EntityFrameworkCore | 常规 Entity Framework Core 诊断。 数据库活动和配置、更改检测、迁移。 |
日志作用域
using (_logger.BeginScope("附加到使用块中创建的日志的消息"))
{
_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");
string p1 = "parm1";
string p2 = "parm2";
_logger.LogWarning(LoggingEvents.GetItemNotFound, "values:{0} {1}", p1, p2);
}
我也没明白具体作用以后再研究