如何使用带有 Asp.net 5 (dotnet core) 的 Serilog 登录到 SQL 服务器

How to log to SQL server using Serilog with Asp.net 5 (dotnet core)

如果我在代码 (C#) 中配置,启动 class,我设法写入 Serilog.Sinks.MSSqlServer 接收器。 但是,如果我在 wwwroot 中尝试 web.config 它不起作用;

<add key="serilog:minimum-level" value="Information"/>
<add key="serilog:using:MSSqlServer" value="Serilog.Sinks.MSSqlServer" />
<add key="serilog:write-to:MSSqlServer.connectionString" value="Server=MVDV.."/>
<add key="serilog:write-to:MSSqlServer.tableName" value="Logs"/>

可能是 Serilog 没有从那里读取配置? 是否可以将此配置密钥放在任何地方以使其开箱即用? 或者我应该创建一个 json 文件,然后读取值并在 Startup class 中再次使用 C# 代码,例如:

.WriteTo.MSSqlServer(connectionString: myReadFromJsonConfigValue) ?

ASP.NET 核心配置已重新架构,不再依赖于 Xml 配置,请查看 this excellent article 了解有关新配置系统的介绍。

为了将 Serilog 与 SQL Server Sink 一起使用,请按照以下步骤操作:

第 1 步: 通过在依赖项部分末尾添加以下行来更新 project.json 以引用 Serilog 和 Serilog.Sinks.MSSqlServer 包。

"Serilog": "1.5.14",
"Serilog.Sinks.MSSqlServer": "3.0.48"

步骤 2: 添加 Serilog SQL Server Sink 设置到 appsettings.json 更新 appsettings.json 文件以包括所有必需的 Serilog SQL 服务器接收器配置,方法是在 appsettings.json 文件末尾和最后一个右花括号之前添加以下 JSON,使请确保将值更新为您的相关值。

"Serilog": {
    "ConnectionString": "Server=(local);Database=serilogdemo;trusted_connection=true",
    "TableName": "Logs"
  }

步骤 3: 更新启动 class 以配置 Serilog.ILogger ASP.NET 核心有一个新的内置依赖注入功能,可以通过 Startup class 中的 ConfigureServices 方法注册服务及其实现来使用,因此添加以下部分添加ConfigureServices 方法结束。 Dependency Injection 特性提供三种类型的注册 Transient , ScopedSingleton 并且为此问题 我使用 Singleton 只是为了演示目的。

services.AddSingleton<Serilog.ILogger>(x=>
{
    return new LoggerConfiguration().WriteTo.MSSqlServer(Configuration["Serilog:ConnectionString"], Configuration["Serilog:TableName"],autoCreateSqlTable:true).CreateLogger();
});

如您所见,可以使用 属性 Configuration 读取 appsettings.json 中嵌套的 JSON 配置,可以使用 : 分隔检索配置值关键。

第 4 步: 获取对 Serilog.ILogger 的引用 您可以通过构建构造函数注入功能获取 Serilog.ILogger 的实例,只需将控制器构造函数中的变量添加到 Serilog.ILogger

希望对您有所帮助