2

我对 C# 和 Azure 还比较陌生,这件事让我很困惑。我想要的是将所有信息+记录到 Seq,并将 MS/系统覆盖到警告+。

启动.cs

using System;
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using Serilog;
using Serilog.Events;

[assembly: FunctionsStartup(typeof(SillyApp.Startup))]

namespace SillyApp
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            var logger = new LoggerConfiguration()
                .MinimumLevel.Information()
                .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
                .MinimumLevel.Override("System", LogEventLevel.Warning)
                .WriteTo.Seq("https://blahblah.bla")
                .CreateLogger();

            builder.Services.AddLogging(b => { b.AddSerilog(logger); });
        }
    }
}

我的理解是我现在已经向日志记录提供程序添加了一个 Serilog 提供程序。这适用于 Seq 接收,但覆盖什么也不做。然而,Minimumlevel.Information 确实有效。

SillyApp.cs

using System;
using System.Text;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;

namespace SillyApp
{
    public class MyClass
    {
        private ILogger<MyClass> _logger;

        public MyClass(ILogger<MyClass> log)
        {
            _logger = log;
        }

        [FunctionName("TimedThing")]
        public async Task RunAsync([TimerTrigger("*/10 * * * * *")] TimerInfo timer)
        {
            _logger.LogInformation("Helloes");
        }
    }
}

我的理论是日志记录提供程序现在包括默认的和 Serilog 的。不知何故,它们结合在一起,让我的生活变得痛苦。Seq 中出现的是一大堆东西。执行的消息,“1 个函数加载”,“主机初始化/启动”。标记为信息,但甚至没有显示在我的运行窗口中。

因此,如果我的理论是正确的,我该如何覆盖默认的日志记录提供程序?如果我弄错了,那么有人可以告诉我发生了什么吗?

4

1 回答 1

1

并非所有 Serilog 功能都可以使用AddSerilog(),最低级别覆盖就是其中之一。

在常规应用程序中,UseSerilog()(较新的 API)IHostBuilder将与所有 Serilog 功能一起正常工作。

不幸的是,我不认为 Azure Function 应用程序可以让您IHostBuilder使用。

更好的选择是使用Seq.Extensions.Logging ( dotnet add package Seq.Extensions.Logging) 而不是 Serilog,并使用以下命令写入 Seq:

        services.AddLogging(b => b.AddSeq("https://blahblah.bla"));

然后,您将能够在配置文件中使用Microsoft.Extensions.Logging级别覆盖:appsettings.json

{
  "Logging": {
    "LogLevel": {
      "Default": "Information"
    },
    "Seq": {
      "ServerUrl": "https://blahblah.bla",
      "ApiKey": "1234567890",
      "LogLevel": {
        "System": "Information",
        "Microsoft": "Warning"
      }
    }
  }
}
于 2021-11-16T22:26:49.600 回答