Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core ASP.NET核心应用程序的appsettings.json中的Serilog配置 免责声明_Asp.net Core_Logging_Asp.net Core Webapi_Serilog - Fatal编程技术网

Asp.net core ASP.NET核心应用程序的appsettings.json中的Serilog配置 免责声明

Asp.net core ASP.NET核心应用程序的appsettings.json中的Serilog配置 免责声明,asp.net-core,logging,asp.net-core-webapi,serilog,Asp.net Core,Logging,Asp.net Core Webapi,Serilog,我知道有几个关于这个主题的类似问题,但我找不到一个能准确反映我所经历的问题的问题。这就是为什么我要提出一个新问题 现状 我有一个使用VS2019构建的ASP.NET核心API应用程序,其中我想使用Serilog登录到数据库服务器。为了实现这一点,我使用了一些可用的Serilog NuGet包 此应用程序使用4种构建配置:“开发”、“测试”、“验收”和“生产” 为了设置Serilog以便在我的应用程序中使用它,我在Program.cs中执行了以下操作 公共类程序 { 公共静态IConfigur

我知道有几个关于这个主题的类似问题,但我找不到一个能准确反映我所经历的问题的问题。这就是为什么我要提出一个新问题

现状 我有一个使用VS2019构建的ASP.NET核心API应用程序,其中我想使用Serilog登录到数据库服务器。为了实现这一点,我使用了一些可用的Serilog NuGet包


此应用程序使用4种构建配置:“开发”、“测试”、“验收”和“生产”

为了设置Serilog以便在我的应用程序中使用它,我在Program.cs中执行了以下操作

公共类程序
{
公共静态IConfiguration配置{get;}=new ConfigurationBuilder()
[...]
.AddJsonFile(“appsettings.json”,可选:false,reloadOnChange:true)
.AddJsonFile($“appsettings.{Environment.GetEnvironmentVariable(“ASPNETCORE_Environment”)}.json),可选:true)
.Build();
公共静态void Main(字符串[]args)
{
Logger.Logger=新的LoggerConfiguration()
.ReadFrom.Configuration(配置)
.Enrich.WithExceptionDetails(新的DestructuringOptions生成器()
.WithDefaultDestructures()
.WithDestructures(新[]{new DbUpdateExceptionDestructurer()})
.WithFilter(新的IgnorePropertyByNameExceptionFilter(“StackTrace”))
.Enrich.WithProperty([…])
.WriteTo.Console()
.CreateLogger();
[...]
}
公共静态IWebHost BuildWebHost(字符串[]args)=>WebHost.CreateDefaultBuilder(args)
.UseStartup()
.UseConfiguration(配置)
.useserlog()
.Build();
}
以及appsettings.*.json:

{
“Serilog”:{
“最低级别”:“警告”,
“书面形式”:[
{
“名称”:“MSSqlServer”,
“Args”:{
“连接字符串”:[…],
“表名”:[…],
“autoCreateSqlTable”:false,
“ColumnOptions部分”:{
[...]
}
}
}
]
}
}
以及launchsettings.json:

{
[...]  
“概况”:{
“发展”:{
“命令名”:“项目”,
“启动浏览器”:正确,
“环境变量”:{
“ASPNETCORE_环境”:“开发”
}
},
“测试”:{
“命令名”:“项目”,
“环境变量”:{
“ASPNETCORE_环境”:“测试”
}
},
“接受”:{
“命令名”:“项目”,
“环境变量”:{
“ASPNETCORE_环境”:“接受”
}
},
“生产”:{
“命令名”:“项目”,
“环境变量”:{
“ASPNETCORE_环境”:“生产”
}
}
}
}
[编辑] 所有appsettings文件(appsettings.json以及所有appsettings.*.json)都具有这些属性

我面临的挑战 当我在我的机器上本地运行应用程序(使用开发构建配置)时,所有操作都按预期进行。日志记录工作正常,并记录到我的开发SQL server


当我使用TFS将应用程序部署到远程计算机时,问题就开始了。无论是部署到开发服务器还是测试服务器,日志记录都不起作用。appsetting.json以及appsetting.*.json文件已正确部署到服务器。当我手动将设置从适当的appsettings.*.json复制到appsettings.json时,一切正常。日志记录必须在正确的SQL数据库中完成。因此,我知道设置是正确的。看起来我的部署只是从appsettings.json中获取设置,而不包括appsettings.*.json中的设置。我一定忽略了什么,但我看不到什么。希望有人能帮我解决这个问题。

在解决方案资源管理器中,右键单击appsettings.json并选中“如果更新请复制”。应将其设置为“更新时复制”或“始终复制”。我认为您的serilog接收器设置和表名在所有环境中都是相同的


我希望这能解决您的问题。

我怀疑您在远程计算机上运行的应用程序没有正确设置环境变量ASPNETCORE\u environment

例如,如果您在Staging环境中,并且希望加载appsettings.Staging.json,则必须将ASPNETCORE_环境变量设置为Staging,否则将无法加载设置文件


注意:launchsettings.json文件仅适用于本地开发,不适用于托管在远程服务器上。

谢谢您的回复。所有appsetting.json和appsetting.*.json文件都有这些设置,因此很遗憾,这并不是这个问题的解决方案。我已将此信息添加到问题中,谢谢。仔细检查这个变量表明它确实丢失了!现在一切都正常运转!