使用 .net core 创建的 Windows 微服务不会将日志写入路径
我从 c# .net core 创建了一个 Windows 服务,它在 appsettings.json 中使用 Serilog.Sinks.Async.File ,如下所示
"Serilog": {
"Using": [
"Serilog.Sinks.Async"
],
"WriteTo": [
{
"Name": "Async",
"Args": {
"configure": [
{
"Name": "File",
"Args": {
"restrictedToMinimumLevel": "Information",
"path": "%PROGRAMDATA%/logs/file.log",
"rollingInterval": "Day",
"formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact"
}
}
]
}
},
上面的配置只是 appsettings.json 中的一个片段,但它还包括其中设置的其他标准参数。
请告诉我,作为本地系统运行的 Windows 服务是否可以将日志写入通过 appsettings.json 配置的 %PROGRAMDATA% 路径。如果将相同的日志文件配置为 Program.cs 中服务的一部分,则它可以工作
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
.Destructure.UsingAttributes()
.WriteTo.Async(a =>
a.File(Environment.ExpandEnvironmentVariables("%PROGRAMDATA%\logs\file.log"))
.WriteTo.Console()
.CreateBootstrapLogger()
此日志记录有效。
包
Serilog.AspNetCore
Microsoft.Extensions.Hosting.WindowsServices
var builder = Host.CreateDefaultBuilder(args);
builder.UseSerilog((hostingContext, services, loggerConfiguration) => loggerConfiguration
.ReadFrom.Configuration(hostingContext.Configuration));
builder.ConfigureServices(services =>
{
services.AddHostedService<Worker>();
services.AddWindowsService();
});
var host =builder.Build();
host.Run();
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "%PROGRAMDATA%/Logs/log.txt",
"rollingInterval": "Day",
"restrictedToMinimumLevel": "Information"
}
},