Serilog是否支持.NET Framework 4.8?求WebAPI数据库日志实现指引
在.NET Framework 4.8 ASP.NET WebAPI中实现Serilog数据库日志
Serilog完全支持.NET Framework 4.8,以下是具体的实现步骤:
1. 安装必要的NuGet包
通过NuGet包管理器或Package Manager Console安装以下包:
Serilog:核心日志库Serilog.Sinks.MSSqlServer:SQL Server数据库日志接收器(若使用其他数据库,可替换为对应接收器,如Serilog.Sinks.PostgreSQL)Serilog.Web.Classic:ASP.NET经典框架集成包,用于对接WebAPI的日志系统Serilog.Sinks.Async(可选):异步日志处理,避免阻塞请求
Package Manager Console命令示例:
Install-Package Serilog Install-Package Serilog.Sinks.MSSqlServer Install-Package Serilog.Web.Classic Install-Package Serilog.Sinks.Async
2. 配置Serilog并集成到WebAPI
在Global.asax.cs的Application_Start方法中初始化Serilog,并替换WebAPI的默认日志系统:
using Serilog; using Serilog.Sinks.MSSqlServer; using Serilog.Web.Classic; protected void Application_Start() { // 初始化Serilog日志配置 Log.Logger = new LoggerConfiguration() .MinimumLevel.Information() // 设置最小日志级别 // 异步写入数据库(若未安装Async包可移除Async包裹) .WriteTo.Async(writer => writer.MSSqlServer( connectionString: "Data Source=YOUR_SERVER;Initial Catalog=YOUR_DB;Integrated Security=True;", sinkOptions: new MSSqlServerSinkOptions { TableName = "Logs", AutoCreateSqlTable = true // 自动创建日志表,首次运行后可改为false })) .CreateLogger(); // 将Serilog集成到WebAPI的跟踪系统 GlobalConfiguration.Configuration.Services.Replace( typeof(System.Web.Http.Tracing.ITraceWriter), new SerilogTraceWriter(Log.Logger)); // 原有WebAPI初始化代码 GlobalConfiguration.Configure(WebApiConfig.Register); } // 程序关闭时释放日志资源 protected void Application_End() { Log.CloseAndFlush(); }
3. 使用配置文件(App.config)管理Serilog设置(可选)
若希望通过配置文件灵活调整日志参数,可在App.config中添加Serilog配置:
<configuration> <appSettings> <add key="serilog:minimum-level" value="Information" /> <add key="serilog:write-to:MSSqlServer.connectionString" value="Data Source=YOUR_SERVER;Initial Catalog=YOUR_DB;Integrated Security=True;" /> <add key="serilog:write-to:MSSqlServer.tableName" value="Logs" /> <add key="serilog:write-to:MSSqlServer.autoCreateSqlTable" value="true" /> <!-- 异步配置(若安装Async包) --> <add key="serilog:write-to:Async.bufferSize" value="1000" /> </appSettings> </configuration>
对应的Global.asax.cs初始化代码改为:
Log.Logger = new LoggerConfiguration() .ReadFrom.AppSettings() .CreateLogger();
4. 在WebAPI控制器中使用Serilog
在控制器中通过Log.ForContext<T>创建上下文绑定的日志实例,或直接使用静态Log.Logger:
public class ValuesController : ApiController { private readonly ILogger _logger = Log.ForContext<ValuesController>(); public IHttpActionResult Get() { _logger.Information("请求Values列表接口,时间:{Now}", DateTime.Now); _logger.Debug("调试信息:当前请求路径为{RequestPath}", Request.RequestUri.PathAndQuery); return Ok(new[] { "value1", "value2" }); } }
注意事项
- 确保数据库连接字符串对应的账号有创建表、插入数据的权限(若开启
AutoCreateSqlTable) - 可通过
ColumnOptions自定义日志表的字段(如添加请求ID、用户ID等),示例:
.WriteTo.MSSqlServer( connectionString: "...", sinkOptions: new MSSqlServerSinkOptions { TableName = "Logs" }, columnOptions: new ColumnOptions { AdditionalColumns = new List<SqlColumn> { new SqlColumn { ColumnName = "RequestId", DataType = SqlDbType.NVarChar, DataLength = 100 } } })
- 生产环境建议关闭
AutoCreateSqlTable,提前手动创建日志表以避免权限问题
内容的提问来源于stack exchange,提问作者Sravani Yadav
相关产品推荐
相关产品推荐

