我正在尝试在.Net核心上配置Serilog以使用命名连接字符串写入SQL表。如果将连接字符串直接放在appsettings文件的“ Serilog”部分,则可以使所有工作正常。但是我希望它使用与Entity Framework相同的连接字符串,所以我不想定义两次。另外,出于安全原因,建议似乎不要将此信息直接存储在appsettings文件中。
这是设置文件的相关部分:
{
"Name": "MSSqlServer",
"Args": {
"connectionString": "Development",
"schemaName": "app",
"tableName": "Logs",
"restrictedToMinimumLevel": "Information"
}
}
开发连接字符串是在Visual Studio的“用户机密”中定义的。
{
"ConnectionStrings": {
"Development": "Server=...",
"Staging": "Server=...",
"Production": "Server=..."
}
}
正如我提到的,如果将“ Development”替换为实际的字符串,它将起作用。我还应该补充一点,实体框架正在使用Development连接字符串,因此我可以肯定该字符串本身很好。
我正在以这种方式在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。
任何帮助将不胜感激。
答案 0 :(得分:2)
我遇到了同样的问题。安装最新的开发包可以为我解决此问题:
Install-Package Serilog.Settings.Configuration -version 3.0.2-dev-00187
Install-Package Serilog.Sinks.MSSqlServer -version 5.1.3-dev-00232
答案 1 :(得分:0)
同一个existing issue已被关闭,据关闭它的人说,现在至少应该使用以下稳定发行版来正常运行所有事情:
Serilog.Settings.Configuration 3.1.0
Serilog.Sinks.MSSqlServer 5.5.0
请注意,您应该以.NET Core 3.1为目标。