ASP.NET Core扩展库之日志
一、简介
二、使用
// 通过IHostBuilder上的UseExtensions方法 // Program.cs .NET 5.0 public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseExtensions(args); webBuilder.UseStartup<Startup>(); }); }
// 在Startup类中 public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddExtensions(Configuration); } }
三、配置
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseExtensions(args, config=> { config.AppLogLevel = Serilog.Events.LogEventLevel.Verbose; config.SystemLogLevel = Serilog.Events.LogEventLevel.Verbose; }); webBuilder.UseStartup<Startup>(); });
如果采用配置文件方式,只需在配置源(如appsettings.json)中设置相关的配置字段:
{ "AppLogLevel": "Verbose", "AllowedHosts": "*" }
四、配置日志级别
日志分类
|
对应日志名
|
对应配置字段
|
默认级别
|
系统日志
|
Microsoft.* 以及 System.*
|
SystemLogLevel
|
Warning
|
EFCore日志
|
Microsoft.EntityFrameworkCore.Database.Command
|
EFCoreCommandLevel
|
Information
|
应用日志
|
除开系统日志及EFCore日志之外的日志
|
AppLogLevel
|
Information
|
五、日志级别的动态修改
// 动态修改日志级别 var apiConfig = host.Services.GetRequiredService<WebApiConfig>(); apiConfig.AppLogLevel = Serilog.Events.LogEventLevel.Error;
六、本地文件日志配置
路径模板名
|
说明
|
DayFolderAndLoggerNameFile
|
以每天日期为目录,日志名称为文件名
|
DayFile
|
以每天日期为日志名称
|
LoggerNameAndDayFile
|
以[日志名称_每天日志]为日志文件名称
|
LevelFile
|
以日志级别缩写为日志文件名称
|
DayFolderAndLevelFile
|
以每天日期为目录,日志级别缩写为日志名称
|
七、容器化支持
// 要支持容器化EFK日志模式,一般只需要设置ConsoleJsonLog为true即可 public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseExtensions(args, config=> { config.ConsoleJsonLog = true; }); webBuilder.UseStartup<Startup>(); });
八、测试支持
IServiceCollection services = new ServiceCollection() .AddExtensions() .AddLogging(logBuilder => { // 添加测试日志记录器 logBuilder.AddTestLogger(); }); IServiceProvider provider = services.BuildServiceProvider(); // 获取日志内容 var logContent = provider.GetTestLogContent();