You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 22:27:22