首页 > 解决方案 > 无法从 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 包的最新稳定版本。

编辑:我已经尝试过,服务可以写入该位置。

标签: asp.net-corewindows-servicesserilog

解决方案


问题是这一行:

"Using": [ "Serilog.Sinks.EventLog" ],

如果您使用此语法,则需要指定所有接收器。它可以完全移除,水槽可以工作(或者您可以指定它,以便您可以使用一条线轻松关闭水槽)。


推荐阅读