当前位置: 首页 > 知识库问答 >
问题:

如何在Azure WebJobs中使用Serilog?

相诚
2023-03-14

我正在尝试使用Serilog设置Azure WebJobs。这是我目前的例外:

微软。azure . web jobs . host . indexers . functionindexingexception:错误索引方法“函数。“ProcessQueueMessage”

我看过这个回答,但是Serilog。不再维护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
    }
}

项目包参考:

共有1个答案

涂溪叠
2023-03-14

将ILogger作为函数参数注入,效果非常好。

Serilog的作者。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);
}

包装参考:

信用:@詹姆斯·略读

 类似资料:
  • 问题内容: 我想使用Android Studio使用Gradle构建工具开发应用程序。我无法在上插入存储库和库。我的文件如下: 如何在项目中添加OpenCV? 问题答案: 您可以在Android Studio中轻松完成此操作。 请按照以下步骤将Open CV作为库添加到您的项目中。 libraries在项目主目录下创建一个文件夹。例如,如果您的项目是OpenCVExamples,则将创建一个Ope

  • 我想使用Android Studio开发一个应用程序使用Gradle构建工具。我无法在上插入OpenCV repo和库。我的文件如下所示: 我如何在我的项目中添加OpenCV?

  • 问题内容: 我想对英语句子加标签,并进行一些处理。我想使用openNLP。我已经安装了 当我执行命令时 它提供输出POSTagging Text.txt中的输入 我希望它安装正确吗? 现在如何从Java应用程序内部进行此POStagging?我已将openNLPtools,jwnl,maxent jar添加到项目中,但是如何调用POStagging? 问题答案: 这是我放在一起的一些(旧)示例代码

  • 问题内容: 我必须在GWT入口点使用java.util.Calendar,但是在运行应用程序时出现错误,这是因为GWT无法找到源代码,无论如何我都可以解决此问题。 提前致谢!!! 问题答案: java.util.Calendar不是模拟的类。您可以在此处找到仿真类的列表: http://code.google.com/webtoolkit/doc/latest/RefJreEmulation.ht

  • 问题内容: 我正在尝试使用Java中的HtmlUnit登录网站。首先,我输入用户名,然后输入密码。之后,我需要从下拉框中选择一个选项。输入用户名和密码似乎有效,但是当我尝试从下拉框中选择项目时出现错误。谁能帮我解决这个问题?我的代码如下: 问题答案: 这是HTMLunit的单元测试中的代码。 请注意,他们使用的是getSelectsByName而不是getElementById。 这是这些单元测试

  • 问题内容: 跟进如何在线程池中使用MDC?如何将MDC与?具体来说,我如何在执行任务之前包装一个MDC值? 问题答案: 以下内容似乎对我有用: 和 针对您的任务而不是普通的ForkJoinPool 运行任务。 代替扩展。