.NET Core 下使用 Serilog 记录日志

1|0Serilog

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.

2|0最佳实践

2|1控制台项目

在项目中添加下面几个组件包

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; }

2|2AspNetCore项目

在项目中添加下面几个组件包

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(); }

__EOF__

本文作者阿星Plus
本文链接https://www.cnblogs.com/meowv/p/13613953.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   阿星Plus  阅读(1032)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
点击右上角即可分享
微信分享提示