我如何使用Seq接收器配置Serilog aspnetcore?

问题描述 投票:1回答:1

我无法从IIS托管的.net core 2.2应用程序获取Seq中的日志语句。当我调试并使用IISExpres运行应用程序时,将显示日志。但是,当应用程序从真实IIS的应用程序池中运行时,只有RequestLogging日志才会显示在Seq中。我想念我的日志。

这是我所做的:

  1. 已安装的Nuget软件包Serilog,Serilog.Aspnetcore和Serilog.Sinks.Seq。

  2. 已删除所有Microsoft.Extensions.Logging和引用。

  3. 遵循Serilog.Aspnetcore Github页面上的示例,在Program.cs中实现了内联配置:

public class Program
{
      ...

      public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .UseSerilog((hostingContext, loggerConfiguration) =>
                       loggerConfiguration.ReadFrom.Configuration(hostingContext.Configuration)
                        , preserveStaticLogger: true, writeToProviders: false);


}
  1. 在Startup.cs中添加了请求记录:
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            ....

            app.UseHttpsRedirection();
            app.UseSerilogRequestLogging();
            app.UseMvc();
        }
  1. 在appsettings.json中配置的Serilog,因此apiKey和Seq serverUrl可以在Azure DevOps的部署中针对开发,测试和生产环境进行配置:
{
  "Serilog": {
    "Using": [ "Serilog.Sinks.Seq" ],
    "MinimumLevel": {
      "Default": "Debug",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "Enrich": [ "FromLogContext" ],
    "WriteTo": [
      {
        "Name": "Seq",
        "Args": {
          "apiKey": "iVPcw1...",
          "serverUrl": "http://localhost:5341"
        }
      }
    ]
  },
    ...
}
  1. 像往常一样添加记录器并在类中进行初始化:
     public class SomeService : ISomeService
     {
        private readonly ILogger logger;
        ...

        public SomeService( ...injections...) {

            logger = Log.ForContext<SomeService>();
            ...
        }

        ...
        public async Task ServiceMethod(Data d) 
        {
            logger.Information("ServiceMethod called with {@d}");
        }

        ...
    }
asp.net-core configuration inline serilog seq-logging
1个回答
0
投票

您在UseSerilog()的参数中:

preserveStaticLogger: true

这指示UseSerilog()不要设置/修改静态Log.Logger实例,这意味着您在以下情况下使用它:

logger = Log.ForContext<SomeService>();

您将获得默认的,未配置的,不执行任何操作的记录器。

设置preserveStaticLogger: false应解决此问题。

© www.soinside.com 2019 - 2024. All rights reserved.