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

Serilog:Azure网络日志记录在Azure中托管时似乎不起作用?

戴树
2023-03-14

我有azure webjob sdk(v3.0.3)应用程序,已配置为使用serilog进行日志记录。当我在系统中本地运行应用程序时,日志似乎可以工作。以下是配置:

    static void Main(string[] args)
        {
            try
            {
                var builder = new HostBuilder()
                        .ConfigureAppConfiguration(SetupConfiguration)
                        .ConfigureLogging(SetupLogging)
                        .ConfigureServices(SetupServices)
                        .ConfigureWebJobs(webJobConfiguration =>
                        {
                            webJobConfiguration.AddTimers();
                            webJobConfiguration.AddAzureStorageCoreServices(); //this is to store logs in azure storage 
                        })
                        .UseSerilog()
                    .Build();
                builder.Run();
            }
}

安装程序配置的代码如下:

  private static void SetupConfiguration(HostBuilderContext hostingContext, IConfigurationBuilder builder)
        {
            var env = hostingContext.HostingEnvironment;
            _configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: false, reloadOnChange: true)
                .AddEnvironmentVariables()
                .Build();
        }

设置服务的代码:

private static void SetupServices(HostBuilderContext hostingContext, IServiceCollection serviceCollection)
    {
        serviceCollection.AddSingleton<IConfiguration>(_configuration);
        Log.Logger = new LoggerConfiguration()
            .ReadFrom.Configuration(_configuration)
            .CreateLogger();
        _logger = serviceCollection.BuildServiceProvider().GetRequiredService<ILoggerFactory>().CreateLogger("test");
    }

日志记录设置如下:

  private static void SetupLogging(HostBuilderContext hostingContext, ILoggingBuilder loggingBuilder)
        {
            loggingBuilder.SetMinimumLevel(LogLevel.Information);
            loggingBuilder.AddConsole();
            loggingBuilder.AddDebug();
            loggingBuilder.AddSerilog(dispose: true);
        }

在我的TimerTrigger方法中,我使用的是记录器:

[Singleton]
        public async static Task Trigger([TimerTrigger("%Job%")]TimerInfo myTimer)
        {           
          _logger.LogInformation($"From Trigger {DateTime.UtcNow.ToString()}");

        }

在 appSettings.json 中,serilog 的配置如下:

"Serilog": {
    "MinimumLevel": "Information",
    "WriteTo": [
        {
            "Name": "RollingFile",
            "Args": {
                "pathFormat": ".\\Log\\log-{Date}.txt",
                "retainedFileCountLimit": 7,
                "fileSizeLimitBytes": 5000000,
                "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} {EventId} [{Level}] [{Properties}] {Message}{NewLine}{Exception}"
            }
        }
    ]
}

当我在本地运行应用程序时,会创建文件夹“Log”和日志文件。但是当我发布webjob时,在webjob的“app_data”文件夹中没有创建“Log”文件夹或日志文件。有人能帮我弄清楚如何配置serilog使其与webjobs一起工作吗?

共有1个答案

井昊乾
2023-03-14

如果您想在WebJobs中使用serilog,您需要安装这个包Serilog.Extensions.WebJobs。然后配置serilog后,您就可以使用它了。

您必须注入ILogger,而不是使用全局日志。否则,日志消息将不会被写入Microsoft Azure WebJobs仪表板。

有关如何配置和使用serilog的详细说明,请参阅本文档。

希望这能帮助你,如果你还有其他问题,请告诉我。

 类似资料:
  • 我试图在一个基于spring的项目中创建记录器策略。 我面临的问题与滚动政策有关。已创建logfile.log并且工作正常,但未创建滚动文件rollingfile.log.%d{yyyy-MM-dd}.log。

  • 我试图使用“使用父母处理程序”来防止日志(由类/类别定义)在多个文件中传播。也就是说,在几个不同的文件中显示相同的消息。例: 但是,有些消息会同时出现在这两者中。“a.b.c.d”消息出现在“a.b”中

  • mySampleApplicaton.gwt.xml mySampleApplication.java(入口点)

  • 我的代码看起来像 我的文件如下所示 当我运行程序时,我看到 我怎样才能修好它呢?

  • 互联网上有许多帖子建议如何从logback迁移到log4j2进行Spring引导日志记录。 参考这个sof post-Spring Boot日志与log4j2-我已经配置我的项目使用log4j2。然后我添加了一些基本的log4j2.xml和log4j2.properties文件来测试。 但是在这些更改之后,我的项目无法进行任何日志记录。有人能帮我找出毛病吗? 项目代码可在github-https:

  • 问题内容: 我在使用该功能时遇到了麻烦。 我只需要知道SQL查询是否返回零行。 我已经尝试过以下简单的语句: 类型是哪里。上面的代码似乎不起作用。无论是否为空,它将始终打印该消息。 我检查了SQL查询本身,当存在行时它正确返回了非空结果。 关于如何确定查询是否已返回0行的任何想法?我用谷歌搜索,找不到任何答案。 问题答案: ResultSet.getFetchSize()不返回结果数!从这里: 使