无法从 windows 服务中托管的 Asp.net 核心网站启动多个 Serilog 接收器
Unable to start multiple Serilog sinks from Asp.net core website hosted in windows service
我的服务运行良好,它正在写入事件日志 serilog 接收器也很好。我的问题是 serilog 拒绝写入 appsettings.json 中提供的任何其他接收器
我的 Appsettings.json 片段
"Serilog": {
"Using": [ "Serilog.Sinks.EventLog" ],
"MinimumLevel": {
"Default": "Debug",
"Override": {
"System": "Information",
"Microsoft": "Information"
}
},
"WriteTo": [
{
"Name": "EventLog",
"Args": {
"source": "FMS",
"manageEventSource": true
}
},
{
"Name": "RollingFile",
"Args": {
"pathFormat": "D:\publish\log-{Date}.txt",
"rollingInterval": "Day",
"fileSizeLimitBytes": 1024,
"retainedFileCountLimit": 60,
"shared": true,
"buffered": true
}
}
],
"Enrich": [ "WithProcessId", "WithProcessName", "WithExceptionDetails" ]
}
我在我的 CustomWebHostService 中将我的记录器设置为
public IConfiguration Configuration { get; } = new ConfigurationBuilder()
.SetBasePath(Data.GetDirectoryPath())//gets directory
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
public CustomWebHostService(IWebHost host) : base(host)
{
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(Configuration)
.CreateLogger();
}
我也尝试过创建一个控制台接收器和一个普通的旧文件接收器,除了事件日志接收器外,没有任何效果。我已经更新到所有必需的 nuget 包的最新稳定版本。
编辑:我试过了,服务可以写入该位置。
问题出在这一行:
"Using": [ "Serilog.Sinks.EventLog" ],
如果您使用此语法,则需要指定所有接收器。它可以完全移除并且接收器将工作(或者您可以指定它以便您可以使用一行轻松关闭接收器)。
我的服务运行良好,它正在写入事件日志 serilog 接收器也很好。我的问题是 serilog 拒绝写入 appsettings.json 中提供的任何其他接收器 我的 Appsettings.json 片段
"Serilog": {
"Using": [ "Serilog.Sinks.EventLog" ],
"MinimumLevel": {
"Default": "Debug",
"Override": {
"System": "Information",
"Microsoft": "Information"
}
},
"WriteTo": [
{
"Name": "EventLog",
"Args": {
"source": "FMS",
"manageEventSource": true
}
},
{
"Name": "RollingFile",
"Args": {
"pathFormat": "D:\publish\log-{Date}.txt",
"rollingInterval": "Day",
"fileSizeLimitBytes": 1024,
"retainedFileCountLimit": 60,
"shared": true,
"buffered": true
}
}
],
"Enrich": [ "WithProcessId", "WithProcessName", "WithExceptionDetails" ]
}
我在我的 CustomWebHostService 中将我的记录器设置为
public IConfiguration Configuration { get; } = new ConfigurationBuilder()
.SetBasePath(Data.GetDirectoryPath())//gets directory
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
public CustomWebHostService(IWebHost host) : base(host)
{
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(Configuration)
.CreateLogger();
}
我也尝试过创建一个控制台接收器和一个普通的旧文件接收器,除了事件日志接收器外,没有任何效果。我已经更新到所有必需的 nuget 包的最新稳定版本。
编辑:我试过了,服务可以写入该位置。
问题出在这一行:
"Using": [ "Serilog.Sinks.EventLog" ],
如果您使用此语法,则需要指定所有接收器。它可以完全移除并且接收器将工作(或者您可以指定它以便您可以使用一行轻松关闭接收器)。