ASP.NET CORE 3.1 Worker Service Application.
Packages
"Microsoft.EntityFrameworkCore.Design" Version="3.1.3"
PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.3"
PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="3.1.3"
PackageReference Include="Serilog.AspNetCore" Version="3.2.0"
PackageReference Include="Serilog.Extensions.Hosting" Version="3.0.0"
Serilog 使用硬编码 LoggerConfiguration 写入文件,但无法从 appsettings.json 加载的配置中工作
这是应用程序代码
public static class Program
{
public static IConfigurationRoot Configuration { get; set; }
private static string _environmentName;
public static void Main(string[] args)
{
var hostBuilder = CreateHostBuilder(args).Build();
//Log.Logger = (Configuration["Logging:LogLevel:Default"] == "Debug")?
// new LoggerConfiguration()
// .MinimumLevel.Debug()
// .WriteTo.Console()
// .WriteTo.File(path: Path.Combine("C:/LogFiles", "OA-EmailService-.log"),
// rollingInterval: RollingInterval.Day, shared: true, flushToDiskInterval: TimeSpan.FromSeconds(10))
// .CreateLogger()
// :
// new LoggerConfiguration()
// .WriteTo.Console()
// .WriteTo.File(path: Path.Combine("C:/LogFiles", "OA-EmailService-.log"),
// rollingInterval: RollingInterval.Day, shared: true, flushToDiskInterval: TimeSpan.FromSeconds(10))
// .CreateLogger()
// ;
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(Configuration)
.CreateLogger();
try
{
Log.Information("APP:App started");
hostBuilder.Run();
}
catch (Exception ex)
{
Log.Fatal(ex, "APP:App startup failed");
}
finally
{
Log.CloseAndFlush();
}
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging((hostingContext, config) =>
{
config.ClearProviders(); //Disabling default integrated logger
_environmentName = hostingContext.HostingEnvironment.EnvironmentName;
})
.ConfigureAppConfiguration((hostingContext, config) =>
{
Configuration = new ConfigurationBuilder()
.SetBasePath(hostingContext.HostingEnvironment.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
//.AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json",
// optional: false,
// reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
})
.UseSerilog()
.UseWindowsService()
.ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); });
}
这是 appsettings.json
{
"Serilog": {
"MinimumLevel": "Debug",
"WriteTo": [
{
"Name": "Console",
"Args": {
"outputTemplate": "===> {Timestamp:HH:mm:ss.fff zzz} [{Level}] {Message}{NewLine}{Exception}"
}
},
{
"Name": "RollingFile",
"Args": {
"pathFormat": "C:/LogFiles/OA-EmailService-.log",
"outputTemplate": "===> {Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {Message}{NewLine}{Exception}"
}
}
]
}
}
有趣的是,控制台接收器的部分运行良好,只是文件有问题。如何强制 serilog 写入文件?