asp.net-core - 无法从 Windows 服务中托管的 Asp.net 核心网站启动多个 Serilog 接收器
问题描述
我的服务运行良好,它也可以很好地写入事件日志 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" ],
如果您使用此语法,则需要指定所有接收器。它可以完全移除,水槽可以工作(或者您可以指定它,以便您可以使用一条线轻松关闭水槽)。
推荐阅读
- formik - Formik Field - 如何对内置的 CSS 进行格式化零件
- python - 如何使用pymongo检查mongoDB中的子属性是否存在
- php - php-fpm 被污染是什么意思?
- html - 是否可以定义一个连接多个选择器并用分号分隔它们的 HTML 选择器?
- r - 如何在R中按月重新采样?
- json - 无法使用 circe 解码具有字段类型 Map[String, String] 的对象
- mysql - 我应该设置什么 COLLATE 以使用所有可能的语言?
- sql-server - 游标用于更新另一个表,使用 SQL Server、T-SQL?
- c# - 我收到以下错误“AADSTS90002 未找到租户授权”。
- wso2 - 部署 gmail 调解器时出现 WSO2 ESB 错误