Serilog命名连接字符串

时间:2019-01-25 16:41:37

标签: .net-core serilog

我正在尝试在.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。

任何帮助将不胜感激。

2 个答案:

答案 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为目标。