簡體   English   中英

如何將 Serilog 與 Azure WebJobs 一起使用?

[英]How do I use Serilog with Azure WebJobs?

我正在嘗試使用 Serilog 設置 Azure WebJobs 設置。 這是我目前的例外:

Microsoft.Azure.WebJobs.Host.Indexers.FunctionIndexingException:錯誤索引方法“Functions.ProcessQueueMessage”---> System.InvalidOperationException:無法將參數“logger”綁定到 ILogger。 確保綁定支持參數類型。 如果您正在使用綁定擴展(例如 Azure 存儲、ServiceBus、計時器等),請確保您已在啟動代碼中調用了擴展的注冊方法(例如 builder.AddAzureStorage()、builder.AddServiceBus( )、builder.AddTimers() 等)。

我已經看到了這個答案,但 Serilog.Extensions.WebJobs 不再維護。

我嘗試了這種托管樣板設置的變體,但它要么導致相同的異常,要么不消耗隊列消息。

我還嘗試查看 SDK 依賴項,但我不知道在哪里可以找到 SDK 依賴項的最終列表以取消選擇任何潛在的版本控制不匹配。

當 ProcessQueueMessage 使用Microsoft.Extensions.Logging.ILogger但不使用Serilog.ILogger時,以下內容按預期工作:

class Program
{
    static async Task Main()
    {
        var builder = new HostBuilder();
        builder.UseSerilog();
        builder.ConfigureWebJobs(b =>
        {
            b.AddAzureStorageCoreServices();
            b.AddAzureStorage();
        });
        var host = builder.Build();
        try { await host.RunAsync(); }
        catch (Exception ex) { Log.Logger.Fatal(ex.Message, ex); }
    }
}

public class Functions
{
    public static void ProcessQueueMessage([QueueTrigger("queue")] string message, ILogger logger)
    {
        logger.Information(message); // Serilog ILogger
    }
}

package 項目參考:

<PackageReference Include="Microsoft.Azure.WebJobs.Extensions" Version="4.0.1" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="4.0.4" />(也與預發行版一起玩)
<PackageReference Include="Microsoft.Extensions.Logging.Console" 版本="5.0.0" />
<PackageReference Include="Serilog.AspNetCore" 版本="4.1.0" />

注入 ILogger 作為 function 參數,就像一個魅力。

Serilog.Extensions.WebJobs 的作者提供了一個合適的模板,我將其濃縮在下面:

class Program
{
    static async Task Main(string[] args)
    {
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Information()
            .WriteTo.Console()
            .CreateLogger();

        IHostBuilder builder = Host.CreateDefaultBuilder(args)
            .UseSerilog(Log.Logger)
            .ConfigureServices(s => s.AddSingleton(Log.Logger))
            .ConfigureWebJobs(b =>
            {
                b.AddAzureStorageCoreServices();
                b.AddAzureStorage();
                b.AddTimers();
            });

        IHost host = builder.Build();
        try { await host.RunAsync(); }
        catch (Exception ex) { Log.Fatal(ex.Message, ex); }
        finally { Log.CloseAndFlush(); }
    }
}

public class Functions
{
    readonly ILogger _logger;

    public Functions(ILogger logger) => _logger = logger.ForContext<Functions>();

    public void ProcessQueueMessage([QueueTrigger("queue")] string message) =>
        _logger.Information(message);
}

Package 參考文獻:

<PackageReference Include="Microsoft.Azure.WebJobs" Version="3.0.27" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions" Version="4.0.1" /> <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="4.0.4" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="5.0.0" /> <PackageReference Include="Serilog.Extensions.Hosting" Version="4.1.2" />
<PackageReference Include="Serilog.Sinks.Console" 版本="3.1.1" />

信用:@詹姆斯略讀

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM