如果我在代码(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/