Serilog 命名连接字符串
Serilog Named Connection String
我正在尝试在 .Net 核心上配置 Serilog 以使用命名连接字符串写入 SQL table。如果我将连接字符串直接放在 appsettings 文件的 "Serilog" 部分,我就能让一切正常工作。但我希望它使用与 Entity Framework 相同的连接字符串,所以我不想定义它两次。另外,出于安全原因,建议似乎不要将此信息直接存储在 appsettings 文件中。
这里是设置文件的相关部分:
{
"Name": "MSSqlServer",
"Args": {
"connectionString": "Development",
"schemaName": "app",
"tableName": "Logs",
"restrictedToMinimumLevel": "Information"
}
}
Development 连接字符串在 Visual Studio 中的 "user secrets" 中定义。
{
"ConnectionStrings": {
"Development": "Server=...",
"Staging": "Server=...",
"Production": "Server=..."
}
}
正如我提到的,如果我将 "Development" 替换为实际的字符串,它就会起作用。我还应该补充一点,Entity Framework 正在使用开发连接字符串,所以我很确定该字符串本身是好的。
我是这样在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 告诉我这可能是一个已知问题。不幸的是,如果这是真的,上面似乎很少activity。
我正在使用 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
相同的 existing issue 已被关闭,根据关闭它的人的说法,现在一切都应该至少使用以下稳定版本:
Serilog.Settings.Configuration 3.1.0
Serilog.Sinks.MSSqlServer 5.5.0
请注意,您应该以 .NET Core 3.1 为目标。
我正在尝试在 .Net 核心上配置 Serilog 以使用命名连接字符串写入 SQL table。如果我将连接字符串直接放在 appsettings 文件的 "Serilog" 部分,我就能让一切正常工作。但我希望它使用与 Entity Framework 相同的连接字符串,所以我不想定义它两次。另外,出于安全原因,建议似乎不要将此信息直接存储在 appsettings 文件中。
这里是设置文件的相关部分:
{
"Name": "MSSqlServer",
"Args": {
"connectionString": "Development",
"schemaName": "app",
"tableName": "Logs",
"restrictedToMinimumLevel": "Information"
}
}
Development 连接字符串在 Visual Studio 中的 "user secrets" 中定义。
{
"ConnectionStrings": {
"Development": "Server=...",
"Staging": "Server=...",
"Production": "Server=..."
}
}
正如我提到的,如果我将 "Development" 替换为实际的字符串,它就会起作用。我还应该补充一点,Entity Framework 正在使用开发连接字符串,所以我很确定该字符串本身是好的。
我是这样在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 告诉我这可能是一个已知问题。不幸的是,如果这是真的,上面似乎很少activity。
我正在使用 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
相同的 existing issue 已被关闭,根据关闭它的人的说法,现在一切都应该至少使用以下稳定版本:
Serilog.Settings.Configuration 3.1.0
Serilog.Sinks.MSSqlServer 5.5.0
请注意,您应该以 .NET Core 3.1 为目标。