asp.net-core - ASP.NET CORE Web API Serilog 和 ElasticSearch 日志不能在 IIS 上工作,但在本地工作
问题描述
我配置了 .NET 5 Web API Serilog 和 Elasticsearch,当运行应用程序并从 REST 客户端发送请求时,它在本地正常工作。但是当我在 IIS 上发布它并向相同的端点发出相同的请求时,它并没有完全工作。在 IIS 上发布的应用程序中没有任何日志。
public class Program
{
public static void Main(string[] args)
{
ConfigureLogging();
CreateHost(args);
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
webBuilder.UseWebRoot("client-app");
})
.ConfigureAppConfiguration(configuration =>
{
configuration.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
configuration.AddJsonFile(
$"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json",
optional: true);
})
.UseSerilog();
private static void ConfigureLogging()
{
var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile(
$"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json",
optional: true)
.Build();
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.Enrich.WithMachineName()
.WriteTo.Debug()
.WriteTo.Console()
.WriteTo.Elasticsearch(ConfigureElasticSink(configuration, environment))
.Enrich.WithProperty("Environment", environment)
.ReadFrom.Configuration(configuration)
.CreateLogger();
}
private static ElasticsearchSinkOptions ConfigureElasticSink(IConfigurationRoot configuration, string environment)
{
return new ElasticsearchSinkOptions(new Uri(configuration["ElasticConfiguration:Uri"]))
{
AutoRegisterTemplate = true,
IndexFormat = $"{Assembly.GetExecutingAssembly().GetName().Name?.ToLower().Replace(".", "-")}-{environment?.ToLower().Replace(".", "-")}-{DateTime.UtcNow:yyyy-MM}"
};
}
private static void CreateHost(string[] args)
{
try
{
CreateHostBuilder(args).Build().Run();
}
catch (System.Exception ex)
{
Log.Fatal($"Failed to start {Assembly.GetExecutingAssembly().GetName().Name}", ex);
throw;
}
}
}
解决方案
推荐阅读
- git - 如何“git-am”应用使用“git-format-patch --no-prefix”创建的补丁?
- angular - 与服务器分页一起使用的 angular 4 过滤器管道
- c# - 提高 C# 项目的语言版本号有什么风险吗?
- python - 移动python数据框中的值
- android - Android将列表从片段传递到viewPagerAdapter
- java - 我无法接收从 rest java ws 发送到我的 android 应用程序的布尔值作为 JSONObject
- android - 将值传递给其中包含链接的 string.xml 值
- linux - LeakSanitizer 不能在 Ubuntu 18.04 的 gdb 下工作?
- bash - (Ubuntu bash 脚本)从配置 txt 设置权限
- javascript - 递归提示函数返回null