我想.Net的核心配置Serilog使用命名的连接字符串写入到一个SQL表。我能得到的一切,如果我直接的AppSettings文件的“Serilog”一节中把连接字符串工作。但我想它使用相同的连接字符串作为实体框架,所以我不想定义它的两倍。加上建议似乎是不能直接在出于安全原因的AppSettings的文件存储这些信息。
下面是设置文件的相关部分:
{
"Name": "MSSqlServer",
"Args": {
"connectionString": "Development",
"schemaName": "app",
"tableName": "Logs",
"restrictedToMinimumLevel": "Information"
}
}
开发连接字符串在Visual Studio我的“用户机密”定义。
{
"ConnectionStrings": {
"Development": "Server=...",
"Staging": "Server=...",
"Production": "Server=..."
}
}
正如我所说,如果我取代“发展”与实际的字符串它的工作原理。我还要补充一点,所以我很肯定字符串本身就是很好的实体框架是用发展的连接字符串。
我加载在Startup.Configure方法这样的配置
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(_configuration)
.CreateLogger();
奇怪的是,如果我手动添加MSSQLSERVER对象在该相同的方法,将工作(除去appsetting文件的MSSQLSERVER部分之后)。显然,这不是理想的,因为改变任何属性将要求应用程序重新编译
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(_configuration)
.WriteTo.MSSqlServer(
connectionString: _configuration.GetConnectionString(env.EnvironmentName),
schemaName: "app",
tableName: "Logs",
restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Information
)
.CreateLogger();
我发现this thread on GitHub,告诉我这可能是一个已知的问题。不幸的是,似乎是它很少活动,如果这是真的。
我使用Serilog.AspNetCore
版本2.1.1,Serilog.Settings.Configuration
版本3.0.1,Serilog.Sinks.MSSqlServer
版本5.1.2和.Net core
版本2.1。
任何帮助将不胜感激。
我有同样的问题。安装最新的开发包解决了这个问题对我来说:
Install-Package Serilog.Settings.Configuration -version 3.0.2-dev-00187
Install-Package Serilog.Sinks.MSSqlServer -version 5.1.3-dev-00232