Я проверил ваш код и, похоже, работал довольно хорошо. Итак, вы можете проверить список ниже, чтобы увидеть, если что-то отличается от моего,
- пакет версия
<ItemGroup>
<PackageReference Include="Serilog.AspNetCore" Version="3.2.0" />
<PackageReference Include="Serilog.Enrichers.Environment" Version="2.1.3" />
<PackageReference Include="Serilog.Enrichers.Process" Version="2.0.1" />
<PackageReference Include="Serilog.Enrichers.Thread" Version="3.1.0" />
<PackageReference Include="Serilog.Extensions.Logging.File" Version="2.0.0" />
</ItemGroup>
используйте тривиальный путь к журналу для замены переменной
pathLogFile для тестирования
public static class CustomConfigurationExtension
{
public static string GetLogOutput(this IConfiguration config) => "log";
}
setup trivial
appsettings. json путь для другой среды (
Development
,
Production
, et c) для тестирования
Startup.cs
.ConfigureHostConfiguration(config =>
{
config.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true)
.AddEnvironmentVariables();
})
используйте этот appsetting. json для тестирования
appsettings. json
{
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Warning"
}
}
},
"AllowedHosts": "*"
}
Большинство приведенных выше примеров я просто следовал serilog EarlyInitializationSample в github. Вот все, что я проверял. Надежда помогает.
Program.cs
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
webBuilder.UseIISIntegration();
})
.ConfigureHostConfiguration(config =>
{
config.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true)
.AddEnvironmentVariables();
})
.UseSerilog((hostingContext, loggerConfiguration) =>
{
var pathLogFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
hostingContext.Configuration.GetLogOutput(),
hostingContext.HostingEnvironment.ApplicationName,
"concurrentFlat.json"
);
if (hostingContext.HostingEnvironment.IsDevelopment())
{
loggerConfiguration
.MinimumLevel.Debug()
.Enrich.FromLogContext()
.Enrich.WithMachineName()
.Enrich.WithEnvironmentUserName()
.Enrich.WithProcessId()
.Enrich.WithProcessName()
.Enrich.WithThreadId()
.Enrich.WithProperty("ApplicationName", hostingContext.HostingEnvironment.ApplicationName)
.Enrich.WithProperty("Environment", hostingContext.HostingEnvironment.EnvironmentName)
.WriteTo.Console()
.WriteTo.File(
path: pathLogFile,
rollingInterval: RollingInterval.Day,
formatter: new CompactJsonFormatter(),
rollOnFileSizeLimit: true,
fileSizeLimitBytes: 10000000
);
}
else
{
loggerConfiguration
.MinimumLevel.Information()
.Enrich.FromLogContext()
.Enrich.WithMachineName()
.Enrich.WithEnvironmentUserName()
.Enrich.WithProcessId()
.Enrich.WithProcessName()
.Enrich.WithThreadId()
.Enrich.WithProperty("ApplicationName", hostingContext.HostingEnvironment.ApplicationName)
.Enrich.WithProperty("Environment", hostingContext.HostingEnvironment.EnvironmentName)
.WriteTo.File(
path: pathLogFile,
formatter: new CompactJsonFormatter(),
rollOnFileSizeLimit: true,
fileSizeLimitBytes: 10000000
);
}
});