- A+
所属分类:.NET技术
Serilog
Like many other libraries for .NET, Serilog provides diagnostic logging to files, the console, and elsewhere. It is easy to set up, has a clean API, and is portable between recent .NET platforms.
Unlike other logging libraries, Serilog is built with powerful structured event data in mind.
最佳实践
控制台项目
在项目中添加下面几个组件包
Install-Package Serilog.Extensions.Logging Install-Package Serilog.Sinks.Console Install-Package Serilog.Sinks.File
class Program { static async Task Main(string[] args) { Log.Logger = new LoggerConfiguration() .MinimumLevel.Information() .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) #if DEBUG .MinimumLevel.Override("Xxx", LogEventLevel.Debug) #else .MinimumLevel.Override("Xxx", LogEventLevel.Information) #endif .Enrich.FromLogContext() .WriteTo.File(Path.Combine(Directory.GetCurrentDirectory(), "Logs/logs.txt")) .WriteTo.Console() .CreateLogger(); await CreateHostBuilder(args).RunConsoleAsync(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureLogging((context, logging) => logging.ClearProviders()) .ConfigureServices((hostContext, services) => { services.AddHostedService<XxxHostedService>(); }); }
//XxxHostedService.cs public class XxxHostedService : IHostedService { private readonly IHostApplicationLifetime _hostApplicationLifetime; public XxxHostedService(IHostApplicationLifetime hostApplicationLifetime) { _hostApplicationLifetime = hostApplicationLifetime; } public async Task StartAsync(CancellationToken cancellationToken) { using var application = AbpApplicationFactory.Create<XxxModule>(options => { options.UseAutofac(); options.Services.AddLogging(c => c.AddSerilog()); }); application.Initialize(); var service = await application.ServiceProvider.GetRequiredService<XxxService>(); service.XxxAsync(); application.Shutdown(); _hostApplicationLifetime.StopApplication(); } public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; }
AspNetCore项目
在项目中添加下面几个组件包
Install-Package Serilog.AspNetCore Install-Package Serilog.Sinks.Async Install-Package Serilog.Sinks.File
public static async Task Main(string[] args) { Log.Logger = new LoggerConfiguration() #if DEBUG .MinimumLevel.Debug() #else .MinimumLevel.Information() #endif .MinimumLevel.Override("Microsoft", LogEventLevel.Information) .Enrich.FromLogContext() .WriteTo.Async(c => c.File($"Logs/{DateTime.Now:yyyy/MMdd}/logs.txt")) .CreateLogger(); try { Log.Information("Starting Xxx."); await CreateHostBuilder(args).Build().RunAsync(); } catch (Exception ex) { Log.Fatal(ex, "Xxx terminated unexpectedly!"); } finally { Log.CloseAndFlush(); } } internal static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseIISIntegration() .UseStartup<Startup>(); }).UseAutofac().UseSerilog(); }