无法从Windows服务中托管的Asp.net核心网站启动多个Serilog接收器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法从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" ],

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

以上是关于无法从Windows服务中托管的Asp.net核心网站启动多个Serilog接收器的主要内容,如果未能解决你的问题,请参考以下文章

托管在服务结构上的 ASP.Net 核心项目未启动

SMTP 服务器无法从托管 c#asp.net 发送电子邮件

无法从 docker windows 容器中的 asp.net 核心应用程序连接到主机数据库

在.net核心应用程序中自托管HTTP(s)端点而不使用asp.net?

如何在 Windows 服务中托管一个简单的 ASP.NET Web 界面

无法在 ASP.NET Core 5.0 下的 IIS 中托管 CoreWcf