.NET Core 配置 Serilog 日志记录完整教程 在.NET开发中,log4net是经典的日志记录工具,而Serilog 更适配.NET Core与微服务架构,原生支持依赖注入,配置灵活、扩展性强,是现代化.NET项目日志记录的优选方案。本文详细讲解两种.NET Core项目配置Serilog记录文件日志的完整方法,开箱即用。
前置准备:安装NuGet依赖包 两种配置方式均需先安装核心依赖,打开NuGet包管理器控制台,执行以下命令:
1 2 Install-Package Serilog.AspNetCore Install-Package Serilog.Sinks.File
其中:
Serilog.AspNetCore :适配ASP.NET Core的核心集成包,支持依赖注入与项目托管
Serilog.Sinks.File :文件日志输出插件,实现日志写入本地文件
方法一:代码方式配置Serilog(直观易懂) 通过代码直接定义日志规则,无需修改配置文件,适合简单项目、快速部署场景。
1. 配置 Program.cs 核心日志规则 在项目Program.cs中初始化Serilog,配置控制台输出、文件滚动日志,同时捕获程序启动异常:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 using System;using Microsoft.AspNetCore.Hosting;using Microsoft.Extensions.Hosting;using Serilog;public class Program { public static void Main (string [] args ) { Log.Logger = new LoggerConfiguration() .WriteTo.Console() .WriteTo.File("logs/log-.txt" , rollingInterval: RollingInterval.Day) .CreateLogger(); try { Log.Information("程序启动成功" ); CreateHostBuilder(args ).Build().Run(); } catch (Exception ex) { Log.Fatal(ex, "程序启动失败" ); } finally { Log.CloseAndFlush(); } } public static IHostBuilder CreateHostBuilder (string [] args ) => Host.CreateDefaultBuilder(args ) .UseSerilog() .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); }
2. Startup.cs 依赖注入配置 无需额外注册日志服务,只需保留基础项目配置,Serilog已全局生效:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 using Microsoft.AspNetCore.Builder;using Microsoft.AspNetCore.Hosting;using Microsoft.Extensions.DependencyInjection;using Microsoft.Extensions.Hosting;public class Startup { public void ConfigureServices (IServiceCollection services ) { services.AddControllersWithViews(); } public void Configure (IApplicationBuilder app, IWebHostEnvironment env ) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error" ); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default" , pattern: "{controller=Home}/{action=Index}/{id?}" ); }); } }
方法二:appsettings.json 配置(推荐、灵活可维护) 将日志规则写入配置文件,无需修改代码即可调整日志级别、输出方式,适合正式项目、微服务项目。
1. 安装依赖包 与代码配置方式一致,安装上述两个NuGet包。
2. 修改 Program.cs 读取配置 从appsettings.json配置文件中加载Serilog规则:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 using System;using Microsoft.AspNetCore.Hosting;using Microsoft.Extensions.Hosting;using Serilog;public class Program { public static void Main (string [] args ) { var config = Host.CreateDefaultBuilder(args ).Build().Configuration; Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(config) .CreateLogger(); try { Log.Information("程序启动成功" ); CreateHostBuilder(args ).Build().Run(); } catch (Exception ex) { Log.Fatal(ex, "程序启动失败" ); } finally { Log.CloseAndFlush(); } } public static IHostBuilder CreateHostBuilder (string [] args ) => Host.CreateDefaultBuilder(args ) .UseSerilog() .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); }
3. appsettings.json 完整日志配置 在配置文件中新增Serilog节点,定义日志级别、输出方式、日志附加信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 { "Serilog" : { "MinimumLevel" : { "Default" : "Information" , "Override" : { "Microsoft" : "Warning" , "System" : "Warning" } } , "WriteTo" : [ { "Name" : "Console" } , { "Name" : "File" , "Args" : { "path" : "logs/log-.txt" , "rollingInterval" : "Day" } } ] , "Enrich" : [ "FromLogContext" , "WithMachineName" , "WithThreadId" ] , "Properties" : { "Application" : "SampleApp" } } }
配置说明与注意事项
日志滚动规则 :rollingInterval: Day 表示按天生成独立日志文件,避免单日志文件过大,方便日志排查
日志级别过滤 :默认记录Information及以上级别日志,屏蔽Microsoft、System框架的冗余Info日志,精简日志内容
日志增强信息 :Enrich配置自动记录机器名、线程ID、上下文信息,方便线上问题排查
权限注意 :部署项目时,需确保程序运行目录拥有读写权限,否则无法生成日志文件
资源释放 :Log.CloseAndFlush() 确保程序退出时,缓存日志全部写入文件,避免日志丢失
运行效果 项目启动后,会自动在根目录生成 logs 文件夹,按日期生成日志文件,同时控制台实时输出日志,完整记录程序启动、运行、异常等全流程信息。