asp.net-core - 如何使用带有 Asp.net 5(dotnet 核心)的 Serilog 登录到 SQL Server

标签 asp.net-core asp.net-core-mvc serilog

如果我在代码(C#)、启动类中配置,我设法写入 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 没有从那里读取配置?
是否可以放置此配置 key 以使其开箱即用?
或者我应该创建一个 json 文件然后读取值并在 Startup 类中再次使用 C# 代码,例如:
.WriteTo.MSSqlServer(connectionString: myReadFromJsonConfigValue) ?

最佳答案

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

为了将 Serilog 与 SQL Server Sink 一起使用,请执行以下步骤:

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

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

第二步:将 Serilog SQL Server Sink 设置添加到 appsettings.json
更新 appsettings.json 文件以包含所有必需的 Serilog SQL Server Sink 配置,方法是在 appsettings.json 文件的末尾和最后一个右大括号之前添加以下 JSON,确保将值更新为相关值。
"Serilog": {
    "ConnectionString": "Server=(local);Database=serilogdemo;trusted_connection=true",
    "TableName": "Logs"
  }

第三步:更新 Startup 类以配置 Serilog.ILogger
ASP.NET Core 有一个新的内置依赖注入(inject)功能,可以通过 ConfigureServices 注册服务及其实现来使用它。内部方法Startup类所以添加以下部分添加 ConfigureServices 的末尾方法。 Dependency Injection功能提供了三种类型的注册 Transient 、 Scoped 和 Singleton ,对于这个问题,我使用 Singleton 只是为了演示目的。
services.AddSingleton<Serilog.ILogger>(x=>
{
    return new LoggerConfiguration().WriteTo.MSSqlServer(Configuration["Serilog:ConnectionString"], Configuration["Serilog:TableName"],autoCreateSqlTable:true).CreateLogger();
});

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

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

希望有帮助

关于asp.net-core - 如何使用带有 Asp.net 5(dotnet 核心)的 Serilog 登录到 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35736437/

相关文章:

c# - 从 claim 中的 Azure AD 获取职位信息(职位名称、部门和经理 ID)

c# - .NET Core 1.1 项目启动时 Microsoft.AspNetCore.Server.Kestrel 中的 TypeLoadException

c# - 多部分/表单数据请求——上传 pdf 导致生成空白文件

asp.net-mvc - 无法找到包 ""的版本 ""

javascript - 如何从添加到html页面的动态元素中获取数据?

linux - Serilog 在 Linux 上运行时不创建日志文件

c# - 如何删除 Entity Framework Core 2.0 中的特定迁移?

c# - 如何解析 ConfigureServices 中的 IOptions 实例?

c# - 为 Amazon OpenSearch 设置 Serilog

.net - 使用 serilog 记录 json