[英]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.